Kara no Shōjo Wiki
karanoshoujowiki
https://karanoshoujo.miraheze.org/wiki/Main_Page
MediaWiki 1.40.1
first-letter
Media
Special
Talk
User
User talk
Kara no Shōjo Wiki
Kara no Shōjo Wiki talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Campaign
Campaign talk
Module
Module talk
Gadget
Gadget talk
Gadget definition
Gadget definition talk
Template:Dated maintenance category
10
71
148
2014-01-08T08:14:55Z
wikipedia>John of Reading
0
Second attempt. Those spaces upset inline templates such as {{As of}}. Instead, try an unconditional <nowiki/>
wikitext
text/x-wiki
<nowiki/><!--This nowiki helps to prevent whitespace at the top of articles-->{{#ifeq:{{FULLROOTPAGENAME}}|Wikipedia:Template messages|<!--Do not categorize-->|<!--
-->{{#ifexpr:{{#if:{{NAMESPACE}}|0|1}}+{{#ifeq:{{{onlyarticles|no}}}|yes|0|1}}
|{{#if:{{{3|}}}
|[[Category:{{{1}}} {{{2}}} {{{3}}}]]<!--
-->{{#ifexist:Category:{{{1}}} {{{2}}} {{{3}}}
|<!--
-->|[[Category:Articles with invalid date parameter in template]]<!--
-->}}
|[[Category:{{#if:{{{5|}}}
|{{{5}}}<!--
-->|{{{1}}}<!--
-->}}]]<!--
-->}}{{#if:{{{4|}}}
|[[Category:{{{4}}}]]}}<!--
-->}}<!--
-->}}<noinclude>
{{documentation}}
</noinclude>
41e7d4000124d4f718ddf222af0b72825048c4c4
Template:Hatnote
10
110
236
2014-05-23T15:55:04Z
wikipedia>SMcCandlish
0
tweak
wikitext
text/x-wiki
<includeonly>{{#invoke:Hatnote|hatnote}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
4a1d1028d07c9056022807a96051e1c82cf2a1c7
Template:When on basepage
10
191
543
2014-09-30T08:52:52Z
wikipedia>Sardanaphalus
0
Sardanaphalus moved page [[Template:Basepage subpage]] to [[Template:When on basepage]]: Per move request
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "page" parameter then detect
basepage/subpage/subsubpage-->
{{#if:{{{page|}}}
| {{#if:{{#titleparts:{{{page}}}|0|3}}
| subsubpage <!--Subsubpage or lower-->
| {{#if:{{#titleparts:{{{page}}}|0|2}}
| subpage
| basepage
}}
}}
| {{#if:{{#titleparts:{{FULLPAGENAME}}|0|3}}
| subsubpage <!--Subsubpage or lower-->
| {{#if:{{#titleparts:{{FULLPAGENAME}}|0|2}}
| subpage
| basepage
}}
}}
}}
| basepage = {{{1|}}}
| subpage = {{{2|}}}
| subsubpage = {{{3| {{{2|}}} }}} <!--Respecting empty parameter on purpose-->
}}<!--End switch--><noinclude>
{{Documentation}}
</noinclude>
cf4dc92df647a26ab0ce149772a1fe3ac6c3dfc0
Template:When on user page
10
216
610
2014-11-29T21:38:24Z
wikipedia>Sardanaphalus
0
Created redirect
wikitext
text/x-wiki
#redirect [[Template:User other]]
[[Category:User namespace templates]]
[[Category:Namespace manipulation templates]]
2cfc08fbeab39bc369817a2250cc3c2d2ae29fb1
Module:Ns has subpages
828
74
154
2014-12-10T06:37:29Z
wikipedia>Mr. Stradivarius
0
Protected Module:Ns has subpages: [[WP:High-risk templates|High-risk Lua module]] ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))
Scribunto
text/plain
-- This module implements [[Template:Ns has subpages]].
-- While the template is fairly simple, this information is made available to
-- Lua directly, so using a module means that we don't have to update the
-- template as new namespaces are added.
local p = {}
function p._main(ns, frame)
-- Get the current namespace if we were not passed one.
if not ns then
ns = mw.title.getCurrentTitle().namespace
end
-- Look up the namespace table from mw.site.namespaces. This should work
-- for a majority of cases.
local nsTable = mw.site.namespaces[ns]
-- Try using string matching to get the namespace from page names.
-- Do a quick and dirty bad title check to try and make sure we do the same
-- thing as {{NAMESPACE}} in most cases.
if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
local nsStripped = ns:gsub('^[_%s]*:', '')
nsStripped = nsStripped:gsub(':.*$', '')
nsTable = mw.site.namespaces[nsStripped]
end
-- If we still have no match then try the {{NAMESPACE}} parser function,
-- which should catch the remainder of cases. Don't use a mw.title object,
-- as this would increment the expensive function count for each new page
-- tested.
if not nsTable then
frame = frame or mw.getCurrentFrame()
local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
end
return nsTable and nsTable.hasSubpages
end
function p.main(frame)
local ns = frame:getParent().args[1]
if ns then
ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
ns = tonumber(ns) or ns
end
local hasSubpages = p._main(ns, frame)
return hasSubpages and 'yes' or ''
end
return p
e133068ba73738b16e1e3eba47735516a461eb5b
Template:Spaces
10
78
168
2015-10-25T11:38:26Z
wikipedia>Edokter
0
use class
wikitext
text/x-wiki
<span class="nowrap">{{#iferror:{{#expr:{{{1|1}}}}}
|{{#switch:{{{1}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}
|{{#invoke:String|rep|{{#switch:{{{2}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}|{{{1|1}}}}}
}}</span><noinclude>
{{documentation}}
</noinclude>
a9ed762825e7579f15dcb9b171b0c1c3bf524b3f
Template:Nowrap
10
141
327
2015-11-28T10:13:53Z
wikipedia>Edokter
0
Adapt comment; edits inside noinclude blocks should not affect job queue, but won't kill parser either way.
wikitext
text/x-wiki
<span class="nowrap">{{{1}}}</span><noinclude>
{{documentation}}
<!-- Categories go on the /doc page; interwikis go to Wikidata. -->
</noinclude>
5d0dc6b6d89b37f4356242404f46138a4017f015
Template:Category link
10
253
730
2016-09-21T14:41:05Z
wikipedia>Anthony Appleyard
0
Anthony Appleyard moved page [[Template:Cl]] to [[Template:Category link]] over redirect: [[Special:Permalink/740508935|Requested]] by Nyuszika7H at [[WP:RM/TR]]: The template should be located at the natural, unabbreviated title and {{[[Temp...
wikitext
text/x-wiki
{{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Stub types for deletion |[[:Category:{{{1}}}|Cat:{{{1}}}]] | [[:Category:{{{1}}}|{{{2|Category:{{{1}}}}}}]]{{#ifeq:{{Yesno|{{{count|no}}}}}|yes|<small> {{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|<span style="font-weight: bold; color: #DD0000;">}}( {{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}}} ){{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|</span>}}</small>}}}}<noinclude>
{{Documentation}}
</noinclude>
cb0fcaeb8242d1d37c27a8dcb57f76fe5b5faa36
Template:Section link
10
148
343
2017-01-17T01:29:39Z
wikipedia>Primefac
0
done
wikitext
text/x-wiki
{{#invoke:Section link|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
8d047e5845f8a9b74a4655b5dd79ca7595a8f88b
Template:Tlp
10
188
537
2017-01-23T13:35:17Z
wikipedia>MSGJ
0
MSGJ moved page [[Template:Tlp]] to [[Template:Template link with parameters]]: expand name of template
wikitext
text/x-wiki
#REDIRECT [[Template:Template link with parameters]]
{{R from move}}
3867e4ef4fe637ce8530859b5486b23e916d0b8a
Template:TOCright
10
261
746
2017-03-31T02:09:13Z
wikipedia>Paine Ellsworth
0
add [[WP:RCAT|rcat]]s
wikitext
text/x-wiki
#REDIRECT [[Template:TOC right]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
f20e461364ddb55d5f46a9e77871e34208173664
Template:Navbar
10
109
234
2017-04-22T18:49:17Z
wikipedia>Plastikspork
0
Closed
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbar|navbar}}</includeonly><noinclude>
{{documentation}}
</noinclude>
868e3566b7e8a9a5a7f3dac75cac429c47de10d3
Template:Further information
10
153
353
2017-12-09T03:53:22Z
wikipedia>Alex 21
0
Changed redirect target from [[Template:Further information]] to [[Template:Further]]
wikitext
text/x-wiki
#REDIRECT [[Template:Further]]
{{R from move}}
42879303989bb2724f884c7b099077b50c789c48
Module:Lang/ISO 639 synonyms
828
245
714
2017-12-13T23:10:47Z
wikipedia>Trappist the monk
0
Scribunto
text/plain
-- File-Date: 2013-01-11
return {
["aar"] = "aa",
["abk"] = "ab",
["afr"] = "af",
["aka"] = "ak",
["amh"] = "am",
["ara"] = "ar",
["arg"] = "an",
["asm"] = "as",
["ava"] = "av",
["ave"] = "ae",
["aym"] = "ay",
["aze"] = "az",
["bak"] = "ba",
["bam"] = "bm",
["bel"] = "be",
["ben"] = "bn",
["bih"] = "bh",
["bis"] = "bi",
["bod"] = "bo",
["bos"] = "bs",
["bre"] = "br",
["bul"] = "bg",
["cat"] = "ca",
["ces"] = "cs",
["cha"] = "ch",
["che"] = "ce",
["chu"] = "cu",
["chv"] = "cv",
["cor"] = "kw",
["cos"] = "co",
["cre"] = "cr",
["cym"] = "cy",
["dan"] = "da",
["deu"] = "de",
["div"] = "dv",
["dzo"] = "dz",
["ell"] = "el",
["eng"] = "en",
["epo"] = "eo",
["est"] = "et",
["eus"] = "eu",
["ewe"] = "ee",
["fao"] = "fo",
["fas"] = "fa",
["fij"] = "fj",
["fin"] = "fi",
["fra"] = "fr",
["fry"] = "fy",
["ful"] = "ff",
["gla"] = "gd",
["gle"] = "ga",
["glg"] = "gl",
["glv"] = "gv",
["grn"] = "gn",
["guj"] = "gu",
["hat"] = "ht",
["hau"] = "ha",
["heb"] = "he",
["her"] = "hz",
["hin"] = "hi",
["hmo"] = "ho",
["hrv"] = "hr",
["hun"] = "hu",
["hye"] = "hy",
["ibo"] = "ig",
["ido"] = "io",
["iii"] = "ii",
["iku"] = "iu",
["ile"] = "ie",
["ina"] = "ia",
["ind"] = "id",
["ipk"] = "ik",
["isl"] = "is",
["ita"] = "it",
["jav"] = "jv",
["jpn"] = "ja",
["kal"] = "kl",
["kan"] = "kn",
["kas"] = "ks",
["kat"] = "ka",
["kau"] = "kr",
["kaz"] = "kk",
["khm"] = "km",
["kik"] = "ki",
["kin"] = "rw",
["kir"] = "ky",
["kom"] = "kv",
["kon"] = "kg",
["kor"] = "ko",
["kua"] = "kj",
["kur"] = "ku",
["lao"] = "lo",
["lat"] = "la",
["lav"] = "lv",
["lim"] = "li",
["lin"] = "ln",
["lit"] = "lt",
["ltz"] = "lb",
["lub"] = "lu",
["lug"] = "lg",
["mah"] = "mh",
["mal"] = "ml",
["mar"] = "mr",
["mkd"] = "mk",
["mlg"] = "mg",
["mlt"] = "mt",
["mon"] = "mn",
["mri"] = "mi",
["msa"] = "ms",
["mya"] = "my",
["nau"] = "na",
["nav"] = "nv",
["nbl"] = "nr",
["nde"] = "nd",
["ndo"] = "ng",
["nep"] = "ne",
["nld"] = "nl",
["nno"] = "nn",
["nob"] = "nb",
["nor"] = "no",
["nya"] = "ny",
["oci"] = "oc",
["oji"] = "oj",
["ori"] = "or",
["orm"] = "om",
["oss"] = "os",
["pan"] = "pa",
["pli"] = "pi",
["pol"] = "pl",
["por"] = "pt",
["pus"] = "ps",
["que"] = "qu",
["roh"] = "rm",
["ron"] = "ro",
["run"] = "rn",
["rus"] = "ru",
["sag"] = "sg",
["san"] = "sa",
["sin"] = "si",
["slk"] = "sk",
["slv"] = "sl",
["sme"] = "se",
["smo"] = "sm",
["sna"] = "sn",
["snd"] = "sd",
["som"] = "so",
["sot"] = "st",
["spa"] = "es",
["sqi"] = "sq",
["srd"] = "sc",
["srp"] = "sr",
["ssw"] = "ss",
["sun"] = "su",
["swa"] = "sw",
["swe"] = "sv",
["tah"] = "ty",
["tam"] = "ta",
["tat"] = "tt",
["tel"] = "te",
["tgk"] = "tg",
["tgl"] = "tl",
["tha"] = "th",
["tir"] = "ti",
["ton"] = "to",
["tsn"] = "tn",
["tso"] = "ts",
["tuk"] = "tk",
["tur"] = "tr",
["twi"] = "tw",
["uig"] = "ug",
["ukr"] = "uk",
["urd"] = "ur",
["uzb"] = "uz",
["ven"] = "ve",
["vie"] = "vi",
["vol"] = "vo",
["wln"] = "wa",
["wol"] = "wo",
["xho"] = "xh",
["yid"] = "yi",
["yor"] = "yo",
["zha"] = "za",
["zho"] = "zh",
["zul"] = "zu"
}
f3fb5374c9e0fdef6ce6ea22736b79468358ca19
Template:Var
10
258
740
2017-12-21T13:31:52Z
wikipedia>Izno
0
nix xml lang invocation
wikitext
text/x-wiki
<var {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} style="padding-right: 1px;{{{style|}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</var><noinclude>
<!--Categories and interwikis go near the bottom of the /doc page.-->
{{Documentation}}
</noinclude>
0e9e47694c01ca4c7b29566a1cb11a117dfbf2c0
Template:LangSwitch
10
422
1283
2018-02-10T09:18:59Z
mw>Mainframe98
0
Protected "[[Template:LangSwitch]]": Excessive vandalism ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
wikitext
text/x-wiki
{{{
{{#switch: {{{ {{Uselang|lang={{{lang|}}}}} |}}}
| ~ = empty
| = {{#switch: {{{ {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}}
| ~ = empty
| = {{#switch: {{{ {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}}
| ~ = empty
| = {{#if: {{{default|}}} | default | en }}
| #default = {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}}
}}
| #default = {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}}
}}
| #default = {{Uselang|lang={{{lang|}}}}}
}}
|}}}<noinclude>
{{Documentation}}
</noinclude>
6276da6db4a231df3efb5b4f4a68cc35dc2b8211
Template:Yesno-no
10
103
222
2018-02-13T20:27:17Z
wikipedia>WOSlinker
0
separate pp-template not needed
wikitext
text/x-wiki
{{safesubst:<noinclude />yesno|{{{1}}}|yes={{{yes|yes}}}|no={{{no|no}}}|blank={{{blank|no}}}|¬={{{¬|no}}}|def={{{def|no}}}}}<noinclude>
{{Documentation|Template:Yesno/doc}}
<!--Categories go in the doc page referenced above; interwikis go in Wikidata.-->
</noinclude>
1ad7b7800da1b867ead8f6ff8cef76e6201b3b56
Template:TemplateDataHeader
10
126
284
2018-02-23T16:30:31Z
wikipedia>Primefac
0
Changed protection level for "[[Template:TemplateDataHeader]]": [[WP:HIGHRISK|high-risk]] template with 4000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
#REDIRECT [[Template:TemplateData header]]
{{R from move}}
61e461016bcb3a0a6fc4d8aea35d590298c19630
Template:Thinsp
10
234
692
2018-02-23T17:03:07Z
wikipedia>Primefac
0
Changed protection level for "[[Template:Thinsp]]": [[WP:HIGHRISK|high-risk]] template with 2000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
#REDIRECT [[Template:Thin space]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
2469064d969db6a9cf1e47e2d1ee0a5e2c9eb495
Template:Details
10
250
724
2018-02-26T07:20:44Z
wikipedia>Galobtter
0
redirect to complete merge
wikitext
text/x-wiki
#REDIRECT [[Template:Further]]
{{Redirect category shell|
{{R from merge}}
}}
1a90a51d85f6cb700979ea38f5f69bee0ff2c85e
Module:Distinguish
828
144
335
2018-04-01T10:06:10Z
wikipedia>Galobtter
0
fixed with text and selfref
Scribunto
text/plain
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local mTableTools --initialize lazily
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
function p.distinguish(frame)
mArguments = require('Module:Arguments')
mTableTools = require('Module:TableTools')
local args = mArguments.getArgs(frame)
local selfref = args.selfref
local text = args.text
args = mTableTools.compressSparseArray(args)
return p._distinguish(args, text, selfref)
end
function p._distinguish(args, text, selfref)
checkType("_distinguish", 1, args, 'table')
if #args == 0 and not text then return '' end
local text = string.format(
'Not to be confused with %s.',
text or mHatlist.orList(args, true)
)
hnOptions = {selfref = selfref}
return mHatnote._hatnote(text, hnOptions)
end
return p
0364d14af01fc656ad1d898c5036fbd12a7ca938
Template:Chart bottom
10
205
588
2018-04-19T21:18:47Z
wikipedia>Plastikspork
0
Better
wikitext
text/x-wiki
<includeonly>|}</includeonly><noinclude>
{{documentation|Template:Chart top/doc}}
</noinclude>
8656d1ab679f4008937f20349c95b51e5b78781e
Template:Param
10
158
363
2018-05-27T03:56:56Z
wikipedia>JJMC89
0
clean subst
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||<{{{tag|code}}}>}}{{{{{{1<noinclude>|foo</noinclude>}}}{{SAFESUBST:<noinclude />#ifeq:{{{2}}}|{{{2|}}} ||}}{{{2|}}}}}}{{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||</{{{tag|code}}}>}}<noinclude>
{{Documentation}}
<!--
PLEASE ADD CATEGORIES AND INTERWIKIS
TO THE /doc SUBPAGE, THANKS
-->
</noinclude>
abdb5d7fe0982064ea62ad15e8298d1693ed69e2
Template:Tag
10
40
250
2018-07-26T17:17:13Z
wikipedia>SMcCandlish
0
These are called attributes; no one who does HTML calls them "parameters".
wikitext
text/x-wiki
<code class="{{#ifeq:{{{wrap|}}}|yes|wrap|nowrap}}" style="{{#ifeq:{{{style|}}}|plain|border:none;background:transparent;|{{{style|}}}}}"><!--
Opening tag
-->{{#switch:{{{2|pair}}}
|c|close =
|e|empty|s|single|v|void
|o|open
|p|pair = <{{#if:{{{link|}}}|[[HTML element#{{{1|tag}}}|{{{1|tag}}}]]|{{{1|tag}}}}}{{#if:{{{params|{{{attribs|}}}}}}| {{{params|{{{attribs}}}}}}}}
}}<!--
Content between tags
-->{{#switch:{{{2|pair}}}
|c|close = {{{content|}}}
|e|empty|s|single|v|void =  />
|o|open = >{{{content|}}}
|p|pair = {{#ifeq:{{{1|tag}}}|!--||>}}{{{content|...}}}
}}<!--
Closing tag
-->{{#switch:{{{2|pair}}}
|e|empty|s|single|v|void
|o|open =
|c|close
|p|pair = {{#ifeq:{{{1|tag}}}|!--|-->|</{{{1|tag}}}>}}
}}<!--
--></code><noinclude>
{{Documentation}}
</noinclude>
eae208bc1612c834de697fa3ee9b343966cf8602
Template:Further
10
145
337
2018-07-27T17:29:22Z
wikipedia>Galobtter
0
fix so that don't need [[Module:Further]] anymore
wikitext
text/x-wiki
<includeonly>{{#invoke:labelled list hatnote|labelledList|Further information{{#if:{{{topic|}}}| on {{{topic|}}}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
dd29c6dfb3894a2dc3f20144a654b7012c9a9214
Template:Str left
10
413
1261
2018-10-05T15:26:02Z
mw>SA 13 Bro
0
Undo revision 2908854 by [[Special:Contributions/49.181.244.49|49.181.244.49]] ([[User talk:49.181.244.49|talk]])
wikitext
text/x-wiki
<includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude>
{{documentation}}
</noinclude>
b0625523728bd6c2c9e6c0a5722a80621103d361
Template:Oldid
10
111
246
2018-12-10T20:41:24Z
wikipedia>Jonesey95
0
rm stray trailing space, per talk page request
wikitext
text/x-wiki
<span class="plainlinks">[{{fullurl:{{{page|{{{1|Main Page}}}}}}|oldid={{{oldid|{{{2|}}}}}}}} {{{label|{{{title|{{{3|{{#if:{{{oldid|{{{2|}}}}}}|Old revision|Current version}} of {{#if:{{{page|{{{1|}}}}}}|'''{{{page|{{{1}}}}}}'''|a page}}}}}}}}}}}]</span><noinclude>
{{documentation}}
</noinclude>
4a42ae0cc77ec0385d4b6508c5d3f366db39ecdb
Template:Template other
10
4
172
2018-12-16T22:06:25Z
wikipedia>Amorymeltzer
0
Changed protection level for "[[Template:Template other]]": [[WP:High-risk templates|Highly visible template]]: Transclusion count has increased dramatically ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
| template
| other
}}
}}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
06fb13d264df967b5232141067eb7d2b67372d76
Module:Color contrast
828
105
226
2019-01-06T22:38:25Z
wikipedia>Johnuniq
0
fix unintended color2lum global error which is causing errors; clean whitespace
Scribunto
text/plain
--
-- This module implements
-- {{Color contrast ratio}}
-- {{Greater color contrast ratio}}
-- {{ColorToLum}}
-- {{RGBColorToLum}}
--
local p = {}
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
local function sRGB (v)
if (v <= 0.03928) then
v = v / 12.92
else
v = math.pow((v+0.055)/1.055, 2.4)
end
return v
end
local function rgbdec2lum(R, G, B)
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
else
return ''
end
end
local function hsl2lum(h, s, l)
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
local c = (1 - math.abs(2*l - 1))*s
local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )
local m = l - c/2
local r, g, b = m, m, m
if( 0 <= h and h < 60 ) then
r = r + c
g = g + x
elseif( 60 <= h and h < 120 ) then
r = r + x
g = g + c
elseif( 120 <= h and h < 180 ) then
g = g + c
b = b + x
elseif( 180 <= h and h < 240 ) then
g = g + x
b = b + c
elseif( 240 <= h and h < 300 ) then
r = r + x
b = b + c
elseif( 300 <= h and h < 360 ) then
r = r + c
b = b + x
end
return rgbdec2lum(255*r, 255*g, 255*b)
else
return ''
end
end
local function color2lum(c)
if (c == nil) then
return ''
end
-- html '#' entity
c = c:gsub("#", "#")
-- whitespace
c = c:match( '^%s*(.-)[%s;]*$' )
-- unstrip nowiki strip markers
c = mw.text.unstripNoWiki(c)
-- lowercase
c = c:lower()
-- first try to look it up
local L = HTMLcolor[c]
if (L ~= nil) then
return L
end
-- convert from hsl
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
end
-- convert from rgb
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
end
-- convert from rgb percent
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
end
-- remove leading # (if there is one) and whitespace
c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$')
-- split into rgb
local cs = mw.text.split(c or '', '')
if( #cs == 6 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2])
local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4])
local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6])
return rgbdec2lum(R, G, B)
elseif ( #cs == 3 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1])
local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2])
local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3])
return rgbdec2lum(R, G, B)
end
-- failure, return blank
return ''
end
-- This exports the function for use in other modules.
-- The colour is passed as a string.
function p._lum(color)
return color2lum(color)
end
function p._greatercontrast(args)
local bias = tonumber(args['bias'] or '0') or 0
local css = (args['css'] and args['css'] ~= '') and true or false
local v1 = color2lum(args[1] or '')
local c2 = args[2] or '#FFFFFF'
local v2 = color2lum(c2)
local c3 = args[3] or '#000000'
local v3 = color2lum(c3)
local ratio1 = -1;
local ratio2 = -1;
if (type(v1) == 'number' and type(v2) == 'number') then
ratio1 = (v2 + 0.05)/(v1 + 0.05)
ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1
end
if (type(v1) == 'number' and type(v3) == 'number') then
ratio2 = (v3 + 0.05)/(v1 + 0.05)
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
end
if css then
local c1 = args[1] or ''
if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c1 = '#' .. c1
end
if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c2 = '#' .. c2
end
if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c3 = '#' .. c3
end
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'
end
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''
end
function p._ratio(args)
local v1 = color2lum(args[1])
local v2 = color2lum(args[2])
if (type(v1) == 'number' and type(v2) == 'number') then
-- v1 should be the brighter of the two.
if v2 > v1 then
v1, v2 = v2, v1
end
return (v1 + 0.05)/(v2 + 0.05)
else
return args['error'] or '?'
end
end
function p._styleratio(args)
local style = (args[1] or ''):lower()
local bg, fg = 'white', 'black'
local lum_bg, lum_fg = 1, 0
if args[2] then
local lum = color2lum(args[2])
if lum ~= '' then bg, lum_bg = args[2], lum end
end
if args[3] then
local lum = color2lum(args[3])
if lum ~= '' then fg, lum_fg = args[3], lum end
end
local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '#', '#'), ';')
for k = 1,#slist do
local s = slist[k]
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' )
k = k or ''
v = v or ''
if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_bg = v, lum end
elseif (k:match('^[%s]*(color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_fg = v, lum end
end
end
if lum_bg > lum_fg then
return (lum_bg + 0.05)/(lum_fg + 0.05)
else
return (lum_fg + 0.05)/(lum_bg + 0.05)
end
end
--[[
Use {{#invoke:Color contrast|somecolor}} directly or
{{#invoke:Color contrast}} from a wrapper template.
Parameters:
-- |1= — required; A color to check.
--]]
function p.lum(frame)
local color = frame.args[1] or frame:getParent().args[1]
return p._lum(color)
end
function p.ratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._ratio(args)
end
function p.styleratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._styleratio(args)
end
function p.greatercontrast(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._greatercontrast(args)
end
return p
1e399769117591366a63f62996c9a407077cc711
Template:FULLBASEPAGENAME
10
116
262
2019-01-07T15:38:13Z
wikipedia>Bsherr
0
bypassing redirect, removing excess white space
wikitext
text/x-wiki
{{#if: {{Ns has subpages | {{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} }}
| {{#if: {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}}
| {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}}
| {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}
}}
| {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}
}}<noinclude>
{{documentation}}
</noinclude>
a21f32ffc20eab6d41631b3fb8af4c63e153a6c3
Module:Color contrast/colors
828
106
228
2019-01-24T12:30:11Z
wikipedia>Galobtter
0
Changed protection level for "[[Module:Color contrast/colors]]": [[WP:High-risk templates|High-risk Lua module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
return {
aliceblue = 0.92880068253475,
antiquewhite = 0.84646951707754,
aqua = 0.7874,
aquamarine = 0.8078549208338,
azure = 0.97265264954166,
beige = 0.8988459998705,
bisque = 0.80732327372979,
black = 0,
blanchedalmond = 0.85084439608156,
blue = 0.0722,
blueviolet = 0.12622014321946,
brown = 0.098224287876511,
burlywood = 0.51559844533893,
cadetblue = 0.29424681085422,
chartreuse = 0.76032025902623,
chocolate = 0.23898526114557,
coral = 0.37017930872924,
cornflowerblue = 0.30318641994179,
cornsilk = 0.93562110372965,
crimson = 0.16042199953026,
cyan = 0.7874,
darkblue = 0.018640801980939,
darkcyan = 0.20329317839046,
darkgoldenrod = 0.27264703559993,
darkgray = 0.39675523072563,
darkgreen = 0.091143429047575,
darkgrey = 0.39675523072563,
darkkhaki = 0.45747326349994,
darkmagenta = 0.07353047651207,
darkolivegreen = 0.12651920884889,
darkorange = 0.40016167026524,
darkorchid = 0.13413142174857,
darkred = 0.054889674531132,
darksalmon = 0.40541471563381,
darkseagreen = 0.43789249325969,
darkslateblue = 0.065792846227988,
darkslategray = 0.067608151928044,
darkslategrey = 0.067608151928044,
darkturquoise = 0.4874606277449,
darkviolet = 0.10999048339343,
deeppink = 0.23866895828276,
deepskyblue = 0.44481603395575,
dimgray = 0.14126329114027,
dimgrey = 0.14126329114027,
dodgerblue = 0.27442536991456,
firebrick = 0.10724525535015,
floralwhite = 0.95922484825004,
forestgreen = 0.18920812076002,
fuchsia = 0.2848,
gainsboro = 0.71569350050648,
ghostwhite = 0.94311261886323,
gold = 0.69860877428159,
goldenrod = 0.41919977809569,
gray = 0.2158605001139,
green = 0.15438342968146,
greenyellow = 0.80609472611453,
grey = 0.2158605001139,
honeydew = 0.96336535554782,
hotpink = 0.34658438169715,
indianred = 0.21406134963884,
indigo = 0.03107561486337,
ivory = 0.99071270600615,
khaki = 0.77012343394121,
lavender = 0.80318750514521,
lavenderblush = 0.90172748631046,
lawngreen = 0.73905893124963,
lemonchiffon = 0.94038992245622,
lightblue = 0.63709141280807,
lightcoral = 0.35522120733135,
lightcyan = 0.94587293494829,
lightgoldenrodyellow = 0.93348351018297,
lightgray = 0.65140563741982,
lightgreen = 0.69091979956865,
lightgrey = 0.65140563741982,
lightpink = 0.58566152734898,
lightsalmon = 0.4780675225206,
lightseagreen = 0.35050145117042,
lightskyblue = 0.56195637618331,
lightslategray = 0.23830165007287,
lightslategrey = 0.23830165007287,
lightsteelblue = 0.53983888284666,
lightyellow = 0.98161818392882,
lime = 0.7152,
limegreen = 0.44571042246098,
linen = 0.88357340984379,
magenta = 0.2848,
maroon = 0.045891942324215,
mediumaquamarine = 0.49389703310801,
mediumblue = 0.044077780212328,
mediumorchid = 0.21639251153773,
mediumpurple = 0.22905858091648,
mediumseagreen = 0.34393112338131,
mediumslateblue = 0.20284629471622,
mediumspringgreen = 0.70704308194184,
mediumturquoise = 0.5133827926448,
mediumvioletred = 0.14371899849357,
midnightblue = 0.02071786635086,
mintcream = 0.97834604947588,
mistyrose = 0.82183047859185,
moccasin = 0.80083000991567,
navajowhite = 0.76519682342785,
navy = 0.015585128108224,
oldlace = 0.91900633405549,
olive = 0.20027537200568,
olivedrab = 0.22593150951929,
orange = 0.4817026703631,
orangered = 0.25516243753416,
orchid = 0.31348806761439,
palegoldenrod = 0.78792647887614,
palegreen = 0.77936759006353,
paleturquoise = 0.76436077921714,
palevioletred = 0.28754994117889,
papayawhip = 0.87797100199835,
peachpuff = 0.74905589878251,
peru = 0.30113074877936,
pink = 0.63271070702466,
plum = 0.45734221587969,
powderblue = 0.68254586500605,
purple = 0.061477070432439,
rebeccapurple = 0.07492341159447,
red = 0.2126,
rosybrown = 0.32319457649407,
royalblue = 0.16663210743188,
saddlebrown = 0.097922285020521,
salmon = 0.36977241527596,
sandybrown = 0.46628543696283,
seagreen = 0.19734199706275,
seashell = 0.92737862206922,
sienna = 0.13697631337098,
silver = 0.52711512570581,
skyblue = 0.55291668518184,
slateblue = 0.14784278062136,
slategray = 0.20896704076536,
slategrey = 0.20896704076536,
snow = 0.96533341834849,
springgreen = 0.73052306068529,
steelblue = 0.20562642207625,
tan = 0.48237604163921,
teal = 0.16996855778968,
thistle = 0.56818401093733,
tomato = 0.30638612719415,
turquoise = 0.5895536427578,
violet = 0.40315452986676,
wheat = 0.74909702820482,
white = 1,
whitesmoke = 0.91309865179342,
yellow = 0.9278,
yellowgreen = 0.50762957208707,
}
6ae47fdb24de4eed5ec26d203faf5341a388987b
Template:Lua
10
122
276
2019-03-20T22:04:45Z
wikipedia>RMCD bot
0
Removing notice of move discussion
wikitext
text/x-wiki
<includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude>
{{Lua|Module:Lua banner}}
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7
Template:Cl
10
254
732
2019-04-24T04:30:48Z
wikipedia>JJMC89
0
actual template is in the category
wikitext
text/x-wiki
#REDIRECT [[Template:Category link]]
{{R from move}}
f79fddc38797fc163b6e6ddeb4377afbea7d0cfc
Template:Clc
10
123
278
2019-04-24T04:30:59Z
wikipedia>JJMC89
0
actual template is in the category
wikitext
text/x-wiki
#REDIRECT [[Template:Category link with count]]
02280e2ab57b544236e11f913e3759c5781ca9d5
Template:Str endswith
10
236
696
2019-05-30T14:16:29Z
wikipedia>MSGJ
0
use [[Module:String]] per [[Wikipedia:Templates_for_discussion/Log/2019_February_18#Module:Str_endswith|TfD]] discussion
wikitext
text/x-wiki
{{#ifeq:{{{1|a}}}{{{2|a}}}|{{{1|b}}}{{{2|b}}}|{{#invoke:String|endswith|source={{{1}}}|pattern={{{2}}} }}|yes<!--backward compatibility -->}}<noinclude>
{{documentation}}
</noinclude>
13dfad2dc8c562869bc85a37524258ffebf9a62f
Template:Ll
10
404
1241
2019-08-30T05:43:05Z
mw>DannyS712
0
Changed protection level for "[[Template:Ll]]": Highly visible template: Redundant to current transclusion on a cascading protected page, but better safe than sorry ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))
wikitext
text/x-wiki
#REDIRECT [[Template:Localized link]]
e3f7e3e940787f3cd08503ff50bc563b52242bdd
Template:Yesno
10
23
45
2019-08-30T05:49:31Z
mw>DannyS712
0
Protected "[[Template:Yesno]]": Highly visible template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only administrators] (indefinite))
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|false
|0 = {{{no|<!-- null -->}}}
| = {{{blank|{{{no|<!-- null -->}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|true
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
166fab9e5411aacd02ca4c9e93fbc7bf6bcf26ac
Module:Arguments
828
13
25
2019-09-02T12:39:11Z
mw>AKlapper (WMF)
0
4 revisions imported from [[:meta:Module:Arguments]]: See [[phab:T231001]]
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
134
25
2020-04-01T06:12:40Z
wikipedia>MusikAnimal
0
1 revision imported
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Template:Pagelang
10
9
17
2019-11-10T01:45:55Z
mw>Shirayuki
0
This template should return empty string if the pagename does not end with "/en" for consistency
wikitext
text/x-wiki
{{#ifeq:{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}|en
|{{#ifeq:{{#titleparts:{{{1|{{PAGENAME}}}}}||-1}}|en
|{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}
}}
|{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
c4102d40356283246cbc855bef4754c0a15b4bea
Template:User other
10
211
600
2019-12-09T01:20:12Z
wikipedia>RMCD bot
0
Removing notice of move discussion
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:User}}
| user
| other
}}
}}
| user = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
f5acc28ea326bedc6c0df1b8fb14cfe5fa940a7f
Module:Documentation/i18n
828
28
55
2019-12-28T03:33:21Z
mw>94rain
0
Protected "[[Module:Documentation/i18n]]": Highly visible page or template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only administrators] (indefinite))
Scribunto
text/plain
local format = require('Module:TNT').format
local i18n = {}
i18n['cfg-error-msg-type'] = format('I18n/Documentation', 'cfg-error-msg-type')
i18n['cfg-error-msg-empty'] = format('I18n/Documentation', 'cfg-error-msg-empty')
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
i18n['template-namespace-heading'] = format('I18n/Documentation', 'template-namespace-heading')
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
i18n['module-namespace-heading'] = format('I18n/Documentation', 'module-namespace-heading')
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
i18n['file-namespace-heading'] = format('I18n/Documentation', 'file-namespace-heading')
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
i18n['other-namespaces-heading'] = format('I18n/Documentation', 'other-namespaces-heading')
-- cfg['view-link-display']
-- The text to display for "view" links.
i18n['view-link-display'] = format('I18n/Documentation', 'view-link-display')
-- cfg['edit-link-display']
-- The text to display for "edit" links.
i18n['edit-link-display'] = format('I18n/Documentation', 'edit-link-display')
-- cfg['history-link-display']
-- The text to display for "history" links.
i18n['history-link-display'] = format('I18n/Documentation', 'history-link-display')
-- cfg['purge-link-display']
-- The text to display for "purge" links.
i18n['purge-link-display'] = format('I18n/Documentation', 'purge-link-display')
-- cfg['create-link-display']
-- The text to display for "create" links.
i18n['create-link-display'] = format('I18n/Documentation', 'create-link-display')
return i18n
9a9f234b177a424f1fc465eb25c484eff54905c0
Module:Yesno
828
12
23
2020-03-01T02:09:18Z
mw>Minorax
0
8 revisions imported from [[:meta:Module:Yesno]]
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
132
23
2020-04-01T06:27:55Z
wikipedia>MusikAnimal
0
Undid revision 948472533 by [[Special:Contributions/w>Vogone|w>Vogone]] ([[User talk:w>Vogone|talk]])
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
Module:TableTools
828
31
61
2020-03-01T02:09:18Z
mw>Minorax
0
4 revisions imported from [[:meta:Module:TableTools]]
Scribunto
text/plain
--[[
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should --
-- not be called directly from #invoke. --
------------------------------------------------------------------------------------
--]]
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
--[[
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
--]]
function p.isPositiveInteger(v)
if type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity then
return true
else
return false
end
end
--[[
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a value can be a valid table key. Lua will
-- generate an error if a NaN is used as a table key.
------------------------------------------------------------------------------------
--]]
function p.isNan(v)
if type(v) == 'number' and tostring(v) == '-nan' then
return true
else
return false
end
end
--[[
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
--]]
function p.shallowClone(t)
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
--]]
function p.removeDuplicates(t)
checkType('removeDuplicates', 1, t, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for i, v in ipairs(t) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
--]]
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k, v in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will
-- return {1, 3, 6}.
------------------------------------------------------------------------------------
--]]
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
return s
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k, v in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like ("foo1", "bar1", "foo2", "baz2"), returns a table
-- of subtables in the format
-- { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }
-- Keys that don't end with an integer are stored in a subtable named "other".
-- The compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
--]]
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
--[[
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
--]]
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for k in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
else -- This will fail with table, boolean, function.
return item1 < item2
end
end
--[[
Returns a list of the keys in a table, sorted using either a default
comparison function or a custom keySort function.
]]
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, { 'function', 'boolean', 'nil' })
end
local list = {}
local index = 1
for key, value in pairs(t) do
list[index] = key
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(list, keySort)
end
return list
end
--[[
Iterates through a table, with the keys sorted using the keysToList function.
If there are only numerical keys, sparseIpairs is probably more efficient.
]]
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local list = p.keysToList(t, keySort, true)
local i = 0
return function()
i = i + 1
local key = list[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
--[[
Returns true if all keys in the table are consecutive integers starting at 1.
--]]
function p.isArray(t)
checkType("isArray", 1, t, "table")
local i = 0
for k, v in pairs(t) do
i = i + 1
if t[i] == nil then
return false
end
end
return true
end
-- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 }
function p.invert(array)
checkType("invert", 1, array, "table")
local map = {}
for i, v in ipairs(array) do
map[v] = i
end
return map
end
--[[
{ "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true }
--]]
function p.listToSet(t)
checkType("listToSet", 1, t, "table")
local set = {}
for _, item in ipairs(t) do
set[item] = true
end
return set
end
--[[
Recursive deep copy function.
Preserves identities of subtables.
]]
local function _deepCopy(orig, includeMetatable, already_seen)
-- Stores copies of tables indexed by the original table.
already_seen = already_seen or {}
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
if type(orig) == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)
end
already_seen[orig] = copy
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
local mt_copy = deepcopy(mt, includeMetatable, already_seen)
setmetatable(copy, mt_copy)
already_seen[mt] = mt_copy
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen)
end
--[[
Concatenates all values in the table that are indexed by a number, in order.
sparseConcat{ a, nil, c, d } => "acd"
sparseConcat{ nil, b, c, d } => "bcd"
]]
function p.sparseConcat(t, sep, i, j)
local list = {}
local list_i = 0
for _, v in p.sparseIpairs(t) do
list_i = list_i + 1
list[list_i] = v
end
return table.concat(list, sep, i, j)
end
--[[
-- This returns the length of a table, or the first integer key n counting from
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return
-- a different value when there are gaps in the array portion of the table.
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of
-- the number of unnamed template parameters, so use this function for
-- frame.args.
--]]
function p.length(t)
local i = 1
while t[i] ~= nil do
i = i + 1
end
return i - 1
end
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
-- if valueToFind is nil, error?
for _, v in ipairs(arr) do
if v == valueToFind then
return true
end
end
return false
end
return p
fe918509f168332267834b3a6f5c219a9de5b2e7
Template:Ombox
10
146
339
2020-04-01T06:12:36Z
wikipedia>MusikAnimal
0
1 revision imported
wikitext
text/x-wiki
{{#invoke:Message box|ombox}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
0e54065432d540737b9e56c4e3a8e7f74d4534ea
Module:File link
828
85
186
2020-04-01T06:31:54Z
wikipedia>MusikAnimal
0
Undid revision 948472508 by [[Special:Contributions/w>IPad365|w>IPad365]] ([[User talk:w>IPad365|talk]])
Scribunto
text/plain
-- This module provides a library for formatting file wikilinks.
local yesno = require('Module:Yesno')
local checkType = require('libraryUtil').checkType
local p = {}
function p._main(args)
checkType('_main', 1, args, 'table')
-- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our
-- own function to get the right error level.
local function checkArg(key, val, level)
if type(val) ~= 'string' then
error(string.format(
"type error in '%s' parameter of '_main' (expected string, got %s)",
key, type(val)
), level)
end
end
local ret = {}
-- Adds a positional parameter to the buffer.
local function addPositional(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = val
end
-- Adds a named parameter to the buffer. We assume that the parameter name
-- is the same as the argument key.
local function addNamed(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = key .. '=' .. val
end
-- Filename
checkArg('file', args.file, 3)
ret[#ret + 1] = 'File:' .. args.file
-- Format
if args.format then
checkArg('format', args.format)
if args.formatfile then
checkArg('formatfile', args.formatfile)
ret[#ret + 1] = args.format .. '=' .. args.formatfile
else
ret[#ret + 1] = args.format
end
end
-- Border
if yesno(args.border) then
ret[#ret + 1] = 'border'
end
addPositional('location')
addPositional('alignment')
addPositional('size')
addNamed('upright')
addNamed('link')
addNamed('alt')
addNamed('page')
addNamed('class')
addNamed('lang')
addNamed('start')
addNamed('end')
addNamed('thumbtime')
addPositional('caption')
return string.format('[[%s]]', table.concat(ret, '|'))
end
function p.main(frame)
local origArgs = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:File link'
})
if not origArgs.file then
error("'file' parameter missing from [[Template:File link]]", 0)
end
-- Copy the arguments that were passed to a new table to avoid looking up
-- every possible parameter in the frame object.
local args = {}
for k, v in pairs(origArgs) do
-- Make _BLANK a special argument to add a blank parameter. For use in
-- conditional templates etc. it is useful for blank arguments to be
-- ignored, but we still need a way to specify them so that we can do
-- things like [[File:Example.png|link=]].
if v == '_BLANK' then
v = ''
end
args[k] = v
end
return p._main(args)
end
return p
66925f088d11530f2482f04181a3baaaa0ad3d0c
Template:Sandbox other
10
24
252
2020-04-03T00:08:09Z
wikipedia>Evad37
0
Also match subpage names beginning with "sandbox", per [[Template_talk:Sandbox_other#Template-protected_edit_request_on_28_March_2020|edit request]]
wikitext
text/x-wiki
{{#if:{{#ifeq:{{#invoke:String|sublength|s={{SUBPAGENAME}}|i=0|len=7}}|sandbox|1}}{{#ifeq:{{SUBPAGENAME}}|doc|1}}{{#invoke:String|match|{{PAGENAME}}|/sandbox/styles.css$|plain=false|nomatch=}}|{{{1|}}}|{{{2|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
91e4ae891d6b791615152c1fbc971414961ba872
Template:Tree chart
10
204
586
2020-04-07T01:44:42Z
wikipedia>Trialpears
0
[[Wikipedia:Templates for discussion/Log/2020 March 22#Template:Family tree]] closed as merge ([[WP:XFDC|XFDcloser]])
wikitext
text/x-wiki
<includeonly>{{#invoke:Tree chart|main}}</includeonly><noinclude>{{documentation}} </noinclude>
4936e8a8e590be91372b7d234aeea78bd418bf0e
Template:Tree chart/start
10
208
594
2020-04-07T04:16:11Z
wikipedia>Pppery
0
Tfd closed
wikitext
text/x-wiki
<table style="border-spacing: 0px; border-collapse: separate; {{#switch: {{{align|}}}
|left = float: left;
|right = float: right;
|center = margin: 0 auto;
|#default =
}} {{{style|}}}"><noinclude>
{{chart/end}}
{{Documentation}}
</noinclude>
e115d0e78fc595436e4e549d91432415a671fded
Template:Tlf
10
114
258
2020-04-13T14:42:57Z
wikipedia>Primefac
0
Primefac moved page [[Template:Tlf]] to [[Template:Template link with link off]]: full name to indicate what it does
wikitext
text/x-wiki
#REDIRECT [[Template:Template link with link off]]
{{Redirect category shell|
{{R from move}}
}}
52759e1d3f7c9aa4a03d0b7d4f84f4c6adf53edf
Module:Effective protection level
828
84
387
2020-04-25T14:26:46Z
mw>Tegel
0
Reverted edits by [[Special:Contribs/2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9|2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9]] ([[User talk:2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9|talk]]) to last version by Pppery
Scribunto
text/plain
local p = {}
-- Returns the permission required to perform a given action on a given title.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
error( 'First parameter must be one of edit, move, create, upload', 2 )
end
if title.namespace == 8 then -- MediaWiki namespace
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
return 'interfaceadmin'
else -- any non-JS/CSS MediaWiki page
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- user JSON page
return 'sysop'
end
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page
return 'sysop'
elseif action == 'move' then
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'sysop'
elseif title.namespace == 6 then
return 'sysop'
else
return 'autoconfirmed'
end
end
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'sysop'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'uploader'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
022c037fc8895cf858d579fcc2b58907ef93a92e
184
2020-09-29T03:38:47Z
wikipedia>Jackmcbarn
0
bring in changes from sandbox
Scribunto
text/plain
local p = {}
-- Returns the permission required to perform a given action on a given title.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local level = mw.ext.FlaggedRevs.getStabilitySettings(title)
level = level and level.autoreview
if level == 'review' then
return 'reviewer'
elseif level ~= '' then
return level
else
return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review
end
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then
error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 )
end
if title.namespace == 8 then -- MediaWiki namespace
if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
return 'interfaceadmin'
else -- any non-JS/CSS MediaWiki page
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- user JSON page
return 'sysop'
end
end
if action == 'undelete' then
return 'sysop'
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page
return 'sysop'
elseif level == 'templateeditor' then
return 'templateeditor'
elseif action == 'move' then
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif title.namespace == 6 then
return 'filemover'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
end
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'autoconfirmed'
elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts
return 'user'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
70256a489edf6be9808031b14a7e3ef3e025da97
Template:Sidebar
10
82
178
2020-06-04T02:43:13Z
wikipedia>Primefac
0
TFD closed as keep ([[WP:XFDC|XFDcloser]])
wikitext
text/x-wiki
{{#invoke:Sidebar|sidebar}}<noinclude>
{{documentation}}</noinclude>
ab2498000a99daf324f656b0badd187b4a3e2b42
Template:Languages/Title
10
421
1281
2020-07-13T14:39:03Z
mw>Fierodelveneto
0
wikitext
text/x-wiki
{{LangSwitch|lang={{{1|}}}
|default={{int:tpt-languages-legend{{#if:{{{1|}}}|/{{{1}}} }} }}
|aln=Gjuha:
|am=ቋምቋ፦
|an=Idioma:
|ang=Sprǣc:
|ar=:اللغة
|arc=ܠܫܢܐ:
|arn=Dungun:
|arz=:اللغة
|avk=Ava:
|ay=Aru:
|az=Dil:
|bat-smg=Kalba:
|bcc=زبان:
|bcl=Tataramon:
|cdo=Ngṳ̄-ngiòng:
|ceb=Pinulongan:
|ch=Lengguahe:
|ckb-arab=زمان:
|co=Lingua :
|crh-cyrl=Тиль:
|crh-latn=Til:
|cu=ѩꙁꙑ́къ :
|cv=Чĕлхе:
|ext=Palra:
|fa=زبان:
|fo=Mál:
|frc=Langue :
|fy=Taal:
|ga=Teanga:
|gag=Dil:
|gan-hans=语言:
|gan-hant=語言:
|gn=Ñe'ẽ:
|got=Razda:
|grc=Γλῶσσα:
|gu=ભાષા:
|gv=Çhengey:
|hak=Ngî-ngièn:
|haw=Kou 'ōlelo:
|he=שפה:
|hi=भाषा:
|hif-latn=Bhasa:
|hy=Լեզու.
|ie=Lingue:
|ilo=Lengguahe:
|ja=言語:
|ka=ენა:
|kaa=Til:
|kg=Ndinga:
|kiu=Zon:
|kk-arab=:ٴتىل
|kk-latn=Til:
|km=ភាសា៖
|kn=ಭಾಷೆ:
|kv=Кыв:
|kw=Yeth:
|la=Lingua:
|li=Taol:
|lij=Lengoa:
|loz=Zwa Siselect:
|lzh=語:
|mdf=Кяль:
|mg=fiteny:
|mhr=Йылме:
|ml=ഭാഷ:
|mn=Хэл:
|mwl=Lhéngua:
|my=ဘာသာ:
|nah=Tlahtōlli:
|nap=Lengua:
|nds=Spraak:
|nds-nl=Taal:
|ne=भाषा:
|new=भाषा:
|nso=Polelo:
|os=Æвзаг:
|pa=ਭਾਸ਼ਾ:
|pam=Amanu:
|pdt=Sproak:
|pnb=بولی:
|pnt=Γλώσσαν:
|prg=Bilā:
|ps=ژبه:
|qu=Rimay:
|sa=भाषा:
|sah=Омугун тыла:
|sc=Limba:
|sdc=Linga:
|se=Giella:
|sei=Itom:
|shi=tutlayt:
|si=භාෂාව:
|sli=Sproache:
|so=Luqada:
|sq=Gjuha:
|srn=Tongo:
|ss=Lúlwîmi:
|stq=Sproake:
|su=Basa:
|szl=Godka:
|ta=மொழி:
|te=భాష:
|tet=Lian:
|tg-cyrl=Забон:
|th=ภาษา:
|ti=ቋንቋ:
|tk=Dil:
|to=Lea:
|tyv=Дыл:
|ug-latn=Til:
|vec=Łéngua:
|vro=Kiil:
|wa=Lingaedje:
|war=Yinaknan:
|wo=Làkk:
|wuu=语言:
|xal=Келн:
|xh=Ulwimi:
|xmf=ნინა:
|yo=Èdè:
|yue=語言:
|zea=Taele:
|zu=Ulimi:
}}<noinclude>{{Documentation}}</noinclude>
8bade1b59d3829a030e04f265e135347310a41c4
Module:String
828
77
162
2020-08-02T15:49:42Z
wikipedia>RexxS
0
separate annotations for str.match from those for str._match
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The fist index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
return str
6df794dd52434e0f6a372c9918f5a9dedd15f579
1249
162
2020-08-17T07:56:29Z
mw>Amire80
0
remove seemingly unnecessary letter
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} );
local s = new_args['s'] or '';
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The fist index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } );
local s = new_args['s'] or '';
local i = tonumber( new_args['i'] ) or 1;
local j = tonumber( new_args['j'] ) or -1;
local len = mw.ustring.len( s );
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1;
end
if j < 0 then
j = len + j + 1;
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' );
end
if j < i then
return str._error( 'String subset indices out of order' );
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch}}
OR
{{#invoke:String|pos|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* https://www.lua.org/manual/5.1/manual.html#5.4.1
* https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain, nomatch )
if s == '' then
return str._error( 'Target string is empty' );
end
if pattern == '' then
return str._error( 'Pattern string is empty' );
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' );
end
if match_index == 0 then
return str._error( 'Match index is out of range' );
end
if plain_flag then
pattern = str._escapePattern( pattern );
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start );
end
local iterator = mw.ustring.gmatch(s, pattern);
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1;
if match_index == 0 then
result = w;
break;
end
end
else
-- Reverse search
local result_table = {};
local count = 1;
for w in iterator do
result_table[count] = w;
count = count + 1;
end
result = result_table[ count + match_index ];
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' );
else
return nomatch;
end
else
return result;
end
end
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} );
local s = new_args['s'] or '';
local start = tonumber( new_args['start'] ) or 1;
local plain_flag = str._getBoolean( new_args['plain'] or false );
local pattern = new_args['pattern'] or '';
local match_index = math.floor( tonumber(new_args['match']) or 1 );
local nomatch = new_args['nomatch'];
return str._match( s, pattern, start, match_index, plain, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} );
local target_str = new_args['target'] or '';
local pos = tonumber( new_args['pos'] ) or 0;
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' );
end
return mw.ustring.sub( target_str, pos, pos );
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} );
local source_str = new_args['source'] or '';
local target_str = new_args['target'] or '';
if target_str == '' then
return 1;
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } );
local source_str = new_args['source'] or '';
local pattern = new_args['target'] or '';
local start_pos = tonumber(new_args['start']) or 1;
local plain = new_args['plain'] or true;
if source_str == '' or pattern == '' then
return 0;
end
plain = str._getBoolean( plain );
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } );
local source_str = new_args['source'] or '';
local pattern = new_args['pattern'] or '';
local replace = new_args['replace'] or '';
local count = tonumber( new_args['count'] );
local plain = new_args['plain'] or true;
if source_str == '' or pattern == '' then
return source_str;
end
plain = str._getBoolean( plain );
if plain then
pattern = str._escapePattern( pattern );
replace = mw.ustring.gsub( replace, "%%", "%%%%" ); --Only need to escape replacement sequences.
end
local result;
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count );
else
result = mw.ustring.gsub( source_str, pattern, replace );
end
return result;
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' );
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame();
local error_category = frame.args.error_category or 'Errors reported by Module String';
local ignore_errors = frame.args.ignore_errors or false;
local no_category = frame.args.no_category or false;
if str._getBoolean(ignore_errors) then
return '';
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>';
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str;
end
return error_str;
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value;
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower();
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false;
else
boolean_value = true;
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str;
else
error( 'No boolean value found' );
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" );
end
return str
32c2c0696ac2e148d7e7390f3cd788a6f8e48361
Template:Em
10
147
341
2020-08-09T23:17:35Z
wikipedia>Bsherr
0
/* top */as found, replacing [[Template:Tld]] with [[Template:Tlc]] or adding/updating category placement comments, plus general and typo fixes
wikitext
text/x-wiki
<em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
e2fac6fb507a0dd72c4e79d02403049c7d857c8d
Template:Yesno
10
23
156
45
2020-08-28T03:15:17Z
wikipedia>Xaosflux
0
add additional paramerters, "t", "f" - requested on talk - worked in sandbox /testcases
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|f
|false
|off
|0 = {{{no|<!-- null -->}}}
| = {{{blank|{{{no|<!-- null -->}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|t
|true
|on
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
629c2937bc5cf7cfe13cd2a598582af832782399
Template:Abbr
10
233
690
2020-09-02T09:46:47Z
wikipedia>Primefac
0
remove third parameter, as it is causing lint issues (TPER)
wikitext
text/x-wiki
<abbr {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} title="{{#tag:nowiki|{{#invoke:String|replace|{{{2|}}}|"|"}}}}">{{{1|}}}</abbr><noinclude>{{Documentation}}
</noinclude>
5fd53aa19ba927ce3eea9092a4fa31f881df0a6e
Template:Nihongo
10
231
686
2020-09-17T17:04:00Z
wikipedia>Trappist the monk
0
use [[Module:Nihongo]];
wikitext
text/x-wiki
<includeonly>{{#invoke:Nihongo|nihongo}}</includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata. -->
</noinclude>
d0dcc4933a65afd93128f90aa7ce4ba2c8bd20e7
Template:Lang
10
247
718
2020-10-19T17:49:42Z
wikipedia>Gonnym
0
wikitext
text/x-wiki
<includeonly>{{#invoke:Lang|{{{fn|lang}}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
ed35aafbfe8198c5ad80fd861124244d0c7f2742
Module:Documentation/styles.css
828
34
67
2020-10-25T15:49:33Z
mw>Pppery
0
Protected "[[Module:Documentation/styles.css]]": Matching protection level with [[Module:Documentation]] ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
sanitized-css
text/css
.ts-doc-sandbox .mbox-image {
padding:.75em 0 .75em .75em;
}
.ts-doc-doc {
clear: both;
background-color: #eaf3ff;
border: 1px solid #a3caff;
margin-top: 1em;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.ts-doc-header {
background-color: #c2dcff;
padding: .642857em 1em .5em;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.ts-doc-header .ts-tlinks-tlinks {
line-height: 24px;
margin-left: 0;
}
.ts-doc-header .ts-tlinks-tlinks a.external {
color: #0645ad;
}
.ts-doc-header .ts-tlinks-tlinks a.external:visited {
color: #0b0080;
}
.ts-doc-header .ts-tlinks-tlinks a.external:active {
color: #faa700;
}
.ts-doc-content {
padding: .214286em 1em;
}
.ts-doc-content:after {
content: '';
clear: both;
display: block;
}
.ts-doc-heading {
display: inline-block;
padding-left: 30px;
background: center left/24px 24px no-repeat;
/* @noflip */
background-image: url(//upload.wikimedia.org/wikipedia/commons/f/fb/OOjs_UI_icon_puzzle-ltr.svg);
height: 24px;
line-height: 24px;
font-size: 13px;
font-weight: 600;
letter-spacing: 1px;
text-transform: uppercase;
}
.ts-doc-content > *:first-child,
.ts-doc-footer > *:first-child {
margin-top: .5em;
}
.ts-doc-content > *:last-child,
.ts-doc-footer > *:last-child {
margin-bottom: .5em;
}
.ts-doc-footer {
background-color: #eaf3ff;
border: 1px solid #a3caff;
padding: .214286em 1em;
margin-top: .214286em;
font-style: italic;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
@media all and (min-width: 720px) {
.ts-doc-header .ts-tlinks-tlinks {
float: right;
}
}
71b09af67524324bf70d203a0a724bc74ec6c82e
244
67
2020-11-19T20:21:58Z
wikipedia>Izno
0
Changed protection level for "[[Module:Documentation/styles.css]]": actually match module ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
sanitized-css
text/css
/* {{pp|small=yes}} */
.documentation,
.documentation-metadata {
border: 1px solid #a2a9b1;
background-color: #ecfcf4;
clear: both;
}
.documentation {
margin: 1em 0 0 0;
padding: 1em;
}
.documentation-metadata {
margin: 0.2em 0; /* same margin left-right as .documentation */
font-style: italic;
padding: 0.4em 1em; /* same padding left-right as .documentation */
}
.documentation-startbox {
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
margin-bottom: 1ex;
}
.documentation-heading {
font-weight: bold;
font-size: 125%;
}
.documentation-clear { /* Don't want things to stick out where they shouldn't. */
clear: both;
}
.documentation-toolbar {
font-style: normal;
font-size: 85%;
}
ce0e629c92e3d825ab9fd927fe6cc37d9117b6cb
Module:For
828
107
230
2020-11-02T22:29:56Z
wikipedia>Andrybak
0
don't add talk pages and pages in the user namespace to [[:Category:Hatnote templates with errors]] – this is similar to [[Special:Diff/953627233/986768317|Module:Other uses of]] and [[Special:Diff/967664662|Module:Hatnote]]
Scribunto
text/plain
local mArguments --initialize lazily
local mHatlist = require('Module:Hatnote list')
local mHatnote = require('Module:Hatnote')
local yesNo = require('Module:Yesno')
local p = {}
--Implements {{For}} from the frame
--uses capitalized "For" to avoid collision with Lua reserved word "for"
function p.For (frame)
mArguments = require('Module:Arguments')
return p._For(mArguments.getArgs(frame))
end
--Implements {{For}} but takes a manual arguments table
function p._For (args)
local use = args[1]
if (not use) then
return mHatnote.makeWikitextError(
'no context parameter provided. Use {{other uses}} for "other uses" hatnotes.',
'Template:For#Errors',
args.category
)
end
local pages = {}
function two (a, b) return a, b, 1 end --lets us run ipairs from 2
for k, v in two(ipairs(args)) do table.insert(pages, v) end
local title = mw.title.getCurrentTitle()
local skipCat = title.isTalkPage or title.namespace == 2 --don't categorise talk pages and userspace
local oddCat = skipCat and '' or '[[Category:Hatnote templates using unusual parameters]]'
local category = yesNo(args.category)
return mHatnote._hatnote(
mHatlist.forSeeTableToString({{use = use, pages = pages}}),
{selfref = args.selfref}
) .. (
(use == 'other uses') and ((category == true) or (category == nil)) and
oddCat or ''
)
end
return p
2faf1bd8c657f3425af829cbde9733a936d8d4f4
Template:Nmbox/styles.css
10
418
1271
2020-11-13T11:35:09Z
mw>Shirayuki
0
+padding
sanitized-css
text/css
.nmbox {
clear: both;
background: #f8f9fa;
border: 1px solid #AAA;
box-sizing: border-box;
margin: 2px 0;
padding: 0;
}
.nmbox * {
box-sizing: border-box;
}
.nmbox-header {
background: #eaecf0;
padding: 4px 0.5em;
font-weight: bold;
text-align: center;
white-space: nowrap
}
.nmbox .mbox-image {
display: inline-block;
padding-right: 1em;
}
.nmbox-text {
border-top: 1px solid #AAA;
width: 100%;
padding: 4px 0.5em;
}
@media screen and (min-width: 768px) {
.nmbox-header {
display: table-cell;
border-right: 1px solid #AAA;
width: 1%;
}
.nmbox-text {
border-top: none;
display: table-cell;
}
}
167c42527fe0b23e717da7cc834c96d0c4f9d1cc
Template:Tlxs
10
154
355
2020-11-20T18:15:40Z
wikipedia>Primefac
0
Primefac moved page [[Template:Tlxs]] to [[Template:Template link expanded with subst]]: make the name more obvious
wikitext
text/x-wiki
#REDIRECT [[Template:Template link expanded with subst]]
{{Redirect category shell|
{{R from move}}
}}
74e095f26cae0cd68518f2f66d74e948a7861c79
Template:Tlg
10
187
535
2020-11-20T18:19:26Z
wikipedia>Primefac
0
Primefac moved page [[Template:Tlg]] to [[Template:Template link general]]: clearer name
wikitext
text/x-wiki
#REDIRECT [[Template:Template link general]]
{{Redirect category shell|
{{R from move}}
}}
707ce913a3ffa8193c9377c3ded7db7b72407500
Template:Tld
10
260
744
2020-11-20T18:52:18Z
wikipedia>Primefac
0
avoid redir
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
be5d6275ea41d83224503e05901f3405c82141f7
Template:Tlx
10
35
329
2020-11-20T18:53:35Z
wikipedia>Primefac
0
Primefac moved page [[Template:Tlx]] to [[Template:Template link expanded]] over redirect: expand name, make it more obvious
wikitext
text/x-wiki
#REDIRECT [[Template:Template link expanded]]
{{Redirect category shell|
{{R from move}}
}}
1fec988ceb46cb324af228aac45d7cd25fcc9008
Template:Template link with parameters
10
189
539
2020-11-21T12:04:32Z
wikipedia>Primefac
0
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nowrap=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlp}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
8fe73a6eea633360a927820d10469b7292bfc1c2
Template:Template link expanded
10
142
331
2020-11-21T12:04:41Z
wikipedia>Primefac
0
update
wikitext
text/x-wiki
{{#Invoke:Template link general|main|code=on}}<noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlx}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
6c99696fee02f1da368ed20d2504e19bc15b1c13
Template:Template link with link off
10
113
256
2020-11-21T12:06:17Z
wikipedia>Primefac
0
update
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nowrap=yes|nolink=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlf}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
b099fea5d1f36b0b4b9cb253ad3a9f4e095f6851
Template:Template link code
10
259
742
2020-11-21T12:06:22Z
wikipedia>Primefac
0
update
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nolink=yes|code=yes|nowrap=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlc}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
044f00ca1bfc10cb967c32e893043ccc6f739764
Template:Template link expanded with subst
10
155
357
2020-11-21T12:06:51Z
wikipedia>Primefac
0
update
wikitext
text/x-wiki
{{#Invoke:Template link general|main|code=on|subst=on}}<noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlxs}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
9b2ef0a8c882c336902f1d61dcff3658528c2210
Template:Graph, chart and plot templates
10
214
606
2020-12-04T23:02:00Z
wikipedia>Funandtrvl
0
fix code
wikitext
text/x-wiki
{{Navbox
| name = Graph, chart and plot templates
|title=[[:Category:Graph, chart and plot templates|Graph, chart and plot templates]]
|state = {{{state<includeonly>|expanded</includeonly>}}}
|bodyclass = hlist
|group5 = Many types
|list5 = [[Template:Graph:Chart]], [[Module:Chart]]
|group10 = [[mw:Extension:Graph|Graph Extension]]
|list10 = [[Template:Graph:Chart]], [[Template:Graph:Lines]], [[Template:Graph:Stacked]], [[Template:Graph:Street map with marks]]
|group20 = Bar
|list20 = [[Template:Bar chart]], [[Template:Bar box]]
|group30 = Line
|list30 = [[Template:Graph:Lines]]
|group40 = [[Scatter plot]]
|list40 = [[Template:Dot chart]]
|group50 = [[Pie chart]]
|list50 = [[Template:Pie chart]]
|group60 = Tree
|list60 =
* [[Template:Tree chart]]
* [[Template:Ahnentafel]]
|group70 = Stacked
|list70 = [[Template:Stacked bar]]
|group80 = [[Cartogram]]
|list80 = [[Template:Graph:Map]], [[Template:Global Heat Maps by Year]]
|group90 = Color legends
|list90 = [[Template:Legend]], [[Template:Legend-line]], [[Template:BrewerColorLegends]]
}}{{Template other |<includeonly>{{sandbox other||[[Category:Graph, chart and plot templates]]}}</includeonly>}}<noinclude>{{documentation|content=
{{collapsible option|default=expanded}}
[[Category:Graph, chart and plot templates| ]]
}}</noinclude>
9669c735c207d7384b95b7e4b32c85cffcc929f2
Template:COinS safe
10
262
748
2020-12-10T09:01:22Z
wikipedia>Andrybak
0
[[:File:Stop hand nuvola.svg]] is licensed under "Creative Commons Attribution-ShareAlike 2.5", link is required for attribution — Undid revision 987128260 by [[Special:Contributions/JsfasdF252|JsfasdF252]] ([[User talk:JsfasdF252|talk]])
wikitext
text/x-wiki
{{notice
|image={{#ifeq: {{{1|}}}|n|Stop hand nuvola.svg}}
|{{#ifeq: {{{1|}}}|n
|This template should not be used in citation templates such as [[Help:Citation Style 1|Citation Style 1]] and [[Help:Citation Style 2|Citation Style 2]], because it includes markup that will pollute the [[COinS]] metadata they produce; see [[Wikipedia:COinS]]. {{{addtext|}}}{{Sandbox other||[[Category:Templates not safe for use in citation templates]]}}
|This template is safe for use in citation templates that produce [[COinS]] metadata; see [[Wikipedia:COinS]]. If HTML or other markup is added, then the template must be reevaluated. {{{addtext|}}}
}}
}}<noinclude>
{{Documentation}}
<!-- Please add categories to the /doc subpage, and interwikis at Wikidata (see Wikipedia:Wikidata) -->
</noinclude>
47abee673d74440d28e801111bf6ee765cd998df
Template:Tl
10
67
136
2021-02-12T22:03:00Z
wikipedia>Anthony Appleyard
0
Anthony Appleyard moved page [[Template:Tl]] to [[Template:Template link]]: [[Special:Permalink/1006428669|Requested]] by Buidhe at [[WP:RM/TR]]: RM closed as move
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Redirect category shell|
{{R from move}}
}}
d6593bb3b4a866249f55d0f34b047a71fe1f1529
Template:Template shortcut
10
160
367
2021-02-16T17:54:32Z
wikipedia>Nardog
0
TfM closed as convert
wikitext
text/x-wiki
<includeonly>{{#invoke:Shortcut|main|template=yes}}</includeonly><noinclude>{{Documentation}}</noinclude>
bfb2889c4c0ec36294b7b667f5e03350d2df680e
Module:Shortcut/config
828
157
361
2021-02-16T18:43:45Z
wikipedia>Nardog
0
Scribunto
text/plain
-- This module holds configuration data for [[Module:Shortcut]].
return {
-- The heading at the top of the shortcut box. It accepts the following parameter:
-- $1 - the total number of shortcuts. (required)
['shortcut-heading'] = '[[Wikipedia:Shortcut|{{PLURAL:$1|Shortcut|Shortcuts}}]]',
-- The heading when |redirect=yes is given. It accepts the following parameter:
-- $1 - the total number of shortcuts. (required)
['redirect-heading'] = '[[Wikipedia:Redirect|{{PLURAL:$1|Redirect|Redirects}}]]',
-- The error message to display when a shortcut is invalid (is not a string, or
-- is the blank string). It accepts the following parameter:
-- $1 - the number of the shortcut in the argument list. (required)
['invalid-shortcut-error'] = 'shortcut #$1 was invalid (shortcuts must be ' ..
'strings of at least one character in length)',
-- The error message to display when no shortcuts or other displayable content
-- were specified. (required)
['no-content-error'] = 'Error: no shortcuts were specified and the ' ..
mw.text.nowiki('|msg=') ..
' parameter was not set.',
-- A category to add when the no-content-error message is displayed. (optional)
['no-content-error-category'] = 'Shortcut templates with missing parameters',
}
f9d1d94844d5953753eb19e30a3ce389eda3d319
Template:Breadcrumb
10
278
791
2021-02-20T12:36:45Z
wikipedia>Matt Fitzpatrick
0
added accessibility attributes, announce this as "breadcrumb navigation region"
wikitext
text/x-wiki
<div role="navigation" aria-label="Breadcrumb" id="contentSub" class="plainlinks nourlexpansion" style="position:relative;{{#switch:{{{28px}}}|yes|yes=bottom:28px;}}" {{#switch:{{{align}}}|right|right=align="right"}}{{#switch:{{{right}}}|yes|yes=align="right"}}><span class="subpages">{{{1<noinclude>|< [[Breadcrumb (navigation)|Breadcrumb]]</noinclude>}}}{{
#if:{{{2|<noinclude>2</noinclude>}}}| | {{{2<noinclude>|2</noinclude>}}}}}{{
#if:{{{3|<noinclude>3</noinclude>}}}| | {{{3<noinclude>|3</noinclude>}}}}}{{
#if:{{{4|<noinclude>4</noinclude>}}}| | {{{4<noinclude>|4</noinclude>}}}}}{{
#if:{{{5|<noinclude>5</noinclude>}}}| | {{{5<noinclude>|5</noinclude>}}}}}</span></div><noinclude>
{{documentation|content=
There is also an optional parameter named <nowiki>{{{align}}}</nowiki>, which allows users to align their breadcrumb at the right side of the page. Use <code><nowiki>|align=right</nowiki></code> to do so. If you are using a back and forth system using two breadcrumbs on a single page, please also add the optional <code><nowiki>|28px=yes</nowiki></code> parameter to the breadcrumb at the right side.
[[Category:Wikipedia formatting and function templates]]
}}</noinclude>
e5e41ee10cee6ebf0e4bb1d4310051f1989deb87
Template:Template link general
10
186
533
2021-02-20T18:40:07Z
wikipedia>Pppery
0
Make substable per edit request
wikitext
text/x-wiki
{{{{{|safesubst:}}}#Invoke:Template link general|main}}<noinclude>
{{Documentation}}
</noinclude>
9871d2f490eaedd832a0ae8016adbf807ddf7b71
Template:Template link
10
68
138
2021-03-25T19:03:22Z
wikipedia>Izno
0
[[Wikipedia:Templates for discussion/Log/2021 March 18#Template:Tlu]] closed as keep ([[WP:XFDC#4.0.11|XFDcloser]])
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
eabbec62efe3044a98ebb3ce9e7d4d43c222351d
Template:Tree chart/end
10
207
592
2021-04-02T21:11:35Z
wikipedia>Jonesey95
0
Fix [[Special:LintErrors|Linter]] errors
wikitext
text/x-wiki
<noinclude><table></noinclude></table><noinclude>{{Documentation|Template:Chart/end/doc}}</noinclude>
15c4ecebd8444b7398759d8fbcb9ac702f8ce07f
Template:Languages/Lang
10
425
1289
2021-04-03T07:40:12Z
mw>Baris6161TURK
0
Plz work
wikitext
text/x-wiki
{{#ifexist: {{#if:{{{2|}}}|{{{2}}}|{{translatable}}}}/{{{1|}}}
| • <bdi lang="{{{1|}}}">{{#if:{{{2|}}}
|<span class="plainlinks">[{{fullurl:{{{2|}}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span>
|<span class="plainlinks">[{{fullurl:{{translatable}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span>
}}</bdi>
}}<noinclude>
{{Documentation}}
</noinclude>
7aabf502401e5b3500551280a475fafa5adc42bc
Template:Dir
10
406
1245
2021-04-04T04:39:11Z
mw>Shirayuki
0
properly test rtl/ltr parameters when they are effectively set per [[translatewiki:Template:Dir]]
wikitext
text/x-wiki
{{#switch:{{lc:{{#if:{{{lang|}}}|{{{lang|}}}|{{#if:{{{1|}}}|{{{1|}}}|{{int:lang}}}}}}}}
|aeb|aeb-arab|aic|ar|arc|arq|ary|arz|azb|bcc|bgn|bqi|bqp|ckb|ckb-arab|dv|en-rtl|fa|fa-af|glk|ha-arab|haz|he|khw|kk-arab|kk-cn|ks|ks-arab|ku-arab|lki|lrc|luz|mzn|nqo|ota|phn|pnb|prd|prs|ps|sd|sdh|skr|skr-arab|tg-arab|tly|ug|ug-arab|ur|uz-arab|xpu|ydd|yi
={{#ifeq:{{{rtl|}}}|{{{rtl|-}}}|{{{rtl|}}}|{{#ifeq:{{{2|}}}|{{{2|-}}}|{{{2|}}}|rtl}}}}
|#default
={{#ifeq:{{{ltr|}}}|{{{ltr|-}}}|{{{ltr|}}}|{{#ifeq:{{{3|}}}|{{{3|-}}}|{{{3|}}}|ltr}}}}
}}<noinclude>{{documentation}}</noinclude>
2ea56bd56901a92d8a5cb44b0835e8534d5e0807
Template:Lua sidebar/styles.css
10
130
292
2021-04-24T04:27:37Z
wikipedia>Izno
0
max-width
sanitized-css
text/css
.lua-sidebar {
width: auto;
max-width: 22em;
}
9984d36eb49fae70dd00527c993784d775409a6b
Template:Plainlist
10
8
15
2021-05-13T02:46:07Z
mw>Izno
0
ok, guess I have to do it like that
wikitext
text/x-wiki
<templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}">{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
8ca89b36606f7babc854ca4f296b3cea3e358a07
Template:Endplainlist
10
112
248
2021-05-14T07:01:30Z
wikipedia>WOSlinker
0
fix lint
wikitext
text/x-wiki
<includeonly></div></includeonly><noinclude>
{{documentation|Template:Plainlist/doc}}
</noinclude>
d545c41582328dd4f197e2b1848c8ad7392b92e0
Template:(!
10
426
1291
2021-06-11T03:20:20Z
mw>ExE Boss
0
/* template-documentation */ Transclude documentation subpage
wikitext
text/x-wiki
<onlyinclude><includeonly>{|</includeonly></onlyinclude><nowiki>{|</nowiki>
{{Documentation}}
13b9672984a140a00c683872647b3b2f8f29c381
Template:Category link with count
10
124
280
2021-06-11T18:13:44Z
wikipedia>GKFX
0
Support wider range of (valid) input format
wikitext
text/x-wiki
[[:Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|<!--
-->{{#if:{{{name|}}}|{{{name}}}|Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}}}<!--
-->]] ({{PAGESINCATEGORY:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|{{{2|all}}}}})<noinclude>
{{Documentation}}
</noinclude>
f93f1540b8c157703bd6d24ae35c35bef745981d
Template:Mbox/TemplateData
10
446
1341
2021-06-23T14:50:22Z
mw>ExE Boss
0
Add `editlinks` and `docpage` parameters to {{[[Template:TemplateData header|TemplateData header]]}}
wikitext
text/x-wiki
<noinclude>{{Documentation subpage}}
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
</noinclude>{{TemplateData header|editlinks=1|docpage=Mbox/TemplateData}}
<templatedata>
{
"description": "This is the specialized version of the {{mbox}} or “multi namespace message box” meta-template.",
"format": "block",
"params": {
"type": {
"label": "Type",
"suggestedvalues": [
"speedy",
"delete",
"content",
"style",
"notice",
"move",
"protection"
],
"type": "string",
"default": "notice",
"suggested": true
},
"image": {
"label": "Image (left)",
"suggestedvalues": [
"none"
],
"default": "Depends on the “type” parameter.",
"suggested": true,
"type": "content"
},
"imageright": {
"label": "Image (right)",
"type": "content"
},
"style": {
"label": "CSS Style",
"type": "string"
},
"textstyle": {
"label": "Text CSS Style",
"type": "string"
},
"text": {
"label": "Text",
"suggested": true,
"type": "content"
},
"small": {
"label": "Small?",
"suggestedvalues": [
"{{{small|}}}",
"left",
"yes",
"1"
],
"default": "0",
"type": "boolean"
},
"smallimage": {
"label": "Small Image (left)",
"suggestedvalues": [
"none"
],
"default": "{{{image}}}",
"type": "content"
},
"smallimageright": {
"label": "Small Image (right)",
"suggestedvalues": [
"none"
],
"default": "{{{imageright}}}",
"type": "content"
},
"smalltext": {
"label": "Small Text",
"default": "{{{text}}}",
"type": "content"
}
}
}
</templatedata><noinclude>
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:TemplateData documentation{{#translation:}}]]
</noinclude>
9df258d03498993e318125a2a2c84537a95b0653
Template:Mbox templates
10
447
1343
2021-06-23T18:33:45Z
mw>ExE Boss
0
Use {{[[Template:Tll|Template link localized]]}}
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{nmbox
| image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]]
| header = {{ll|Template:Mbox|2=<translate><!--T:1--> Message box templates</translate>}}
| text = {{flatlist|1=
* {{tll|ambox}}
* {{tll|cmbox}}
* {{tll|fmbox}}
* {{tll|imbox}}
* {{tll|nmbox}}
* {{tll|ombox}}
* {{tll|tmbox}}
}}
}}</onlyinclude>
[[Category:Navigation templates{{#translation:}}]]
9dc6ee90892df1c583767586088a9a448e0a441c
Template:Mbox templates/en
10
448
1345
2021-06-23T21:59:50Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{nmbox
| image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]]
| header = {{ll|Template:Mbox|2=Message box templates}}
| text = {{flatlist|1=
* {{tll|ambox}}
* {{tll|cmbox}}
* {{tll|fmbox}}
* {{tll|imbox}}
* {{tll|nmbox}}
* {{tll|ombox}}
* {{tll|tmbox}}
}}
}}</onlyinclude>
[[Category:Navigation templates{{#translation:}}]]
d09263a3b65012961144152a83c6a76b403d4e21
Module:Lua banner/config
828
165
381
2021-06-26T17:30:02Z
mw>ExE Boss
0
Set `wish_category` to [[:Category:Lua-candidates|Lua-candidates]]
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Allow wishes: whether wishes for conversion to Lua are allowed.
-- If true, calls with zero parameters are valid, and considered to be wishes:
-- The box’s text is “This template should use Lua”, and cfg['wish_category'] is
-- added. If false, such calls are invalid, an error message appears, and
-- cfg['error_category'] is added.
cfg['allow_wishes'] = false
-- Default category: this category is added if the module call contains errors
-- (e.g. no module listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = 'Lua templates with errors'
-- Wish category: this category is added if no module is listed, and wishes are
-- allowed. (Not used if wishes are not allowed.) A category name without
-- namespace, or nil to disable categorization.
cfg['wish_category'] = 'Lua-candidates'
-- Default category: this category is added if none of the below module_categories
-- matches the first module listed. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Lua-based templates'
-- Module categories: one of these categories is added if the first listed module
-- is the listed module (e.g. {{Lua|Module:String}} adds
-- [[Category:Lua String-based templates]].) Format:
-- ['<module name>'] = '<category name>'
-- where neither <module name> nor <category name> contains namespace. An empty
-- table (i.e. no module-based categorization) will suffice on smaller wikis.
cfg['module_categories'] = {
['String'] = 'Lua String-based templates',
}
return cfg -- Don’t touch this line.
960aa5bb0f008cf7e3ef37963e1dbc797c2ffdd5
Module:Lua banner
828
121
379
2021-06-26T17:46:56Z
mw>ExE Boss
0
Fix `wish` parameter
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')
local p = {}
local function format(msg)
return TNT.format('I18n/Lua banner', msg)
end
local function getConfig()
return mw.loadData('Module:Lua banner/config')
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args, cfg)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules, cfg, args)
local trackingCategories = p.renderTrackingCategories(args, modules, nil, cfg)
return box .. trackingCategories
end
function p.renderBox(modules, cfg, args)
local boxArgs = {}
if #modules < 1 then
cfg = cfg or getConfig()
if cfg['allow_wishes'] or yesno(args and args.wish) then
boxArgs.text = format('wishtext')
else
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error_emptylist'))
end
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
end
local moduleList = mList.makeList('bulleted', moduleLinks)
boxArgs.text = format('header') .. '\n' .. moduleList
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = string.format(
'[[File:Lua-logo-nolabel.svg|30px|alt=%s|link=%s]]',
format('logo_alt'),
format('logo_link')
)
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj, cfg)
if yesno(args.nocat) then
return ''
end
cfg = cfg or getConfig()
local cats = {}
-- Error category
if #modules < 1 and not (cfg['allow_wishes'] or yesno(args.wish)) and cfg['error_category'] then
cats[#cats + 1] = cfg['error_category']
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
if titleObj.namespace == 10
and not cfg['subpage_blacklist'][titleObj.subpageText]
then
local category = args.category
if not category then
local pagename = modules[1] and mw.title.new(modules[1])
category = pagename and cfg['module_categories'][pagename.text]
if not category then
if (cfg['allow_wishes'] or yesno(args.wish)) and #modules < 1 then
category = cfg['wish_category']
else
category = cfg['default_category']
end
end
end
if category then
cats[#cats + 1] = category
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
4b55b48bd92caeb84decde5f14c77b68ae09653e
Template:Navbox
10
66
130
2021-06-26T18:05:09Z
wikipedia>Trialpears
0
Remove TfD notice as it wouldn't involve any changes to this template.
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
fe9b964401f895918ee4fe078678f1722a3c41ec
Template:GetFallback
10
424
1287
2021-06-28T11:24:11Z
mw>Shirayuki
0
Undo revision 4671593 by [[Special:Contributions/Shirayuki|Shirayuki]] ([[User talk:Shirayuki|talk]])
wikitext
text/x-wiki
{{#switch: {{Uselang|lang={{{1|}}}}}
| arz = ar
| be-x-old = be-tarask <!-- same language; be-x-old is used on be-x-old.wikipedia but be-tarask is the preferred code -->
| be-tarask = be-x-old
| crh-cyrl | crh-latn = crh
| als | bar | de-formal | de-at | de-ch | frr | ksh = de
| en-gb = en
| ckb | mzn | glk = fa
| mg | br | co | frp | ht | ty | wa = fr
| hif-deva | hif-latn = hif
| ike-cans | ike-latn = ike
| vec = it
| kk-arab | kk-cyrl | kk-latn | kk-cn | kk-kz | kk-tr = kk
| ku-latn | ku-arab = ku
| nds-nl | pdt = nds
| nds = nds-nl
| af | fy | li | nl-informal | vls | zea = nl
| szl | csb = pl
| pt-br = pt
| ruq-cyrl | ruq-grek | ruq-latn = ruq
| sr-ec | sr-el = sr
| tg-cyrl | tg-latn = tg
| tt-cyrl | tt-latn = tt
| gan | gan-hans | ii | wuu | za | zh | zh-cn | zh-my | zh-sg = zh-hans
| ami | cdo | gan-hant | hak | lzh | nan | pwn | szy | tay | trv | zh-classical | zh-hk | zh-min-nan | zh-mo | zh-tw = zh-hant
| #default = {{#if: {{{default|}}} | {{{default|}}} | en }}
}}<noinclude>
{{documentation}}
</noinclude>
7deecc99a03a7fd2bab8ac12e18aa7a782979d2f
Template:Nowrap/styles.css
10
411
1257
2021-06-29T01:46:27Z
mw>ExE Boss
0
Copied from [[c:Template:Nowrap/styles.css]]
sanitized-css
text/css
.nowrap,
.nowrap a:before,
.nowrap .selflink:before {
white-space: nowrap;
}
becbf59e1bc0e28944a852c01b3f8473995d87b8
Template:Module other
10
167
385
2021-06-29T15:22:28Z
mw>Hasley
0
Reverted edits by [[Special:Contribs/2401:4900:3996:6A4E:2CEB:DA57:3646:62A7|2401:4900:3996:6A4E:2CEB:DA57:3646:62A7]] ([[User talk:2401:4900:3996:6A4E:2CEB:DA57:3646:62A7|talk]]) to last version by CptViraj
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Module}}
| module
| other
}}
}}
| module = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
5a2444103b3cffc028f4dc0de2e8a278f87c7129
Template:Uses TemplateStyles
10
17
33
2021-07-02T19:47:07Z
mw>Tacsipacsi
0
Undo revision 4680578 by [[Special:Contributions/ExE Boss|ExE Boss]] ([[User talk:ExE Boss|talk]]): neither this is the [[Module:Uses TemplateStyles/config|local configuration]]; furthermore, recreating the Lua logic in wikitext is a plain waste of efforts (not to mention that it’s not even correct: {{#if:}} simply tests emptiness, so the “and” in the middle ensures that it will always be truthy, no matter what the parameters are)
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#invoke:Uses TemplateStyles|main}}</includeonly></onlyinclude>
{{Uses TemplateStyles|Template:Uses TemplateStyles/example.css|nocat=true}}
{{documentation}}
91689f58ed39c0b53e3fadf3edb76166ba33a964
Module:Uses TemplateStyles/config
828
32
63
2021-07-03T06:37:58Z
mw>ExE Boss
0
Use {{[[mw:Special:MyLanguage/Help:Extension:Translate/Page translation administration#.23translation|#translation]]:}} for [[:Category:Templates using TemplateStyles]] (I didn’t think it would work here)
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Sandbox title: if the stylesheet’s title is <template>/<stylesheet>.css, the
-- stylesheet’s sandbox is expected to be at <template>/<sandbox_title>/<stylesheet>.css
-- Set to nil to disable sandbox links.
cfg['sandbox_title'] = 'sandbox'
-- Error category: this category is added if the module call contains errors
-- (e.g. no stylesheet listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = nil
-- Default category: this category is added if no custom category is specified
-- in module/template call. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Templates using TemplateStyles'
.. mw.getCurrentFrame():callParserFunction("#translation:")
-- Protection conflict category: this category is added if the protection level
-- of any stylesheet differs from the one of the template. A category name
-- without namespace, or nil to disable categorization (not recommended).
cfg['protection_conflict_category'] = nil
-- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil
-- to disable padlock check.
cfg['padlock_pattern'] = nil
-- Missing padlock category: this category is added if a protected stylesheet
-- doesn’t contain any padlock template (specified by the above Lua pattern).
-- A category name without namespace (no nil allowed) if the pattern is not nil,
-- unused (and thus may be nil) otherwise.
cfg['missing_padlock_category'] = nil
return cfg -- Don’t touch this line.
2e6b3c52ca2ac4b6a454a6d572121c4bf6e16ea1
Template:Lua
10
122
375
276
2021-07-04T05:28:53Z
mw>ExE Boss
0
Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]>
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#invoke:Lua banner|main}}</includeonly></onlyinclude>
{{Lua|Module:Lua banner}}
{{Documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
4642b0a145984533bddd3a6f0293c56ce201b88d
Template:Unordered list
10
428
1295
2021-07-04T11:12:09Z
mw>ExE Boss
0
ExE Boss moved page [[Template:Bulleted list]] to [[Template:Unordered list]]: Match the resulting <[[devmo:Web/HTML/Element/ul|ul]]> element
wikitext
text/x-wiki
<onlyinclude>{{<includeonly>safesubst:</includeonly>#invoke:List|bulleted}}</onlyinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
bb14fb759a0fb4040a621405e0c2616019ac9a62
Template:Flatlist/styles.css
10
443
1335
2021-07-05T20:28:28Z
mw>ExE Boss
0
[[mw:Special:Diff/999662/4662823|15 revisions]] imported from [[mw:Snippets/Horizontal lists]]
sanitized-css
text/css
/**
* Style for horizontal lists (separator following item).
* @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists
* @revision 9 (2016-08-10)
* @author [[User:Edokter]]
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
/* don't trust the note that says margin doesn't work with inline
* removing margin: 0 makes dds have margins again */
margin: 0;
display: inline;
}
/* Display nested lists inline */
/*
We remove .inline since it's not used here.
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
*/
.hlist dl dl, .hlist dl ol, .hlist dl ul,
.hlist ol dl, .hlist ol ol, .hlist ol ul,
.hlist ul dl, .hlist ul ol, .hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li,
.hlist .mw-empty-elt {
display: none;
}
/* Generate interpuncts */
.hlist dt:after {
content: ": ";
}
.hlist dd:after,
.hlist li:after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child:after,
.hlist dt:last-child:after,
.hlist li:last-child:after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li:before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child:before,
.hlist dt ol > li:first-child:before,
.hlist li ol > li:first-child:before {
content: " (" counter(listitem) "\a0";
}
9e75e584c328c44948ca9aae5c1cb4fa3c76a622
Template:Navbar/en
10
440
1323
2021-07-05T20:53:16Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><templatestyles src="Module:Navbar/styles.css"/><span class="noprint plainlinks navbar" style="{{{style|}}}"><small><!--
-->{{#if:{{{mini|}}}{{{plain|}}}|<!--nothing-->|<!--else:
--><span style="{{{fontstyle|}}}">{{#if:{{{text|}}}|{{{text}}}|This box:}} </span>}}<!--
-->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">[</span>}}<!--
--><span style="white-space:nowrap;word-spacing:-.12em;"><!--
-->[[{{transclude|{{{1}}}}}|<span style="{{{fontstyle|}}}" title="View this template"><!--
-->{{#if:{{{mini|}}}|v|view}}</span>]]<!--
--><span style="{{{fontstyle|}}}"> <b>·</b> </span><!--
-->[{{fullurl:{{<noinclude><nowiki/></noinclude>TALKPAGENAME:{{transclude|{{{1}}}}}}}}} <span style="{{{fontstyle|}}}" title="Discuss this template"><!--
-->{{#if:{{{mini|}}}|d|talk}}</span>]<!--
-->{{#if:{{{noedit|}}}|<!--nothing-->|<!--else:
--><span style="{{{fontstyle|}}}"> <b>·</b> </span><!--
-->[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} <span style="{{{fontstyle|}}}" title="Edit this template"><!--
-->{{#if:{{{mini|}}}|e|edit}}</span>]}}<!--
--></span><!--
-->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">]</span>}}<!--
--></small></span><noinclude>
{{Documentation|content=
{{Uses TemplateStyles|Module:Navbar/styles.css}}
== Usage ==
=== General ===
When one of the following examples is placed inside a given [[Special:MyLanguage/Help:Templates|template]], it adds navbar navigational functionality:
: {{tlx|Navbar|Navbar|mini{{=}}1}}
: {{tlx|Navbar|Navbar|plain{{=}}1}}
: {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}}
The <code><nowiki>{{subst:PAGENAME}}</nowiki></code> will be substituted with the template's name when parsed by the servers.
For example, {{tlx|Navbar|navbar/doc}} gives:
{{Navbar|navbar/doc}}
=== Font-size ===
Font-size is <code>88%</code> when used in a navbar, and <code>100%</code> when nested in a navbox.
In the navbar, the weight is "<code>normal</code>"; when nested in navbox, it takes on the outer setting.
The middot is bold.
== Examples ==
=== Required parameters ===
* {{tlx|Navbar|''template name''}} — the template name is required.
=== Optional parameters ===
{{(}}{{!}} class="wikitable"
! Options
! Parameters
! Produces...
{{!}}-
{{!}} Basic
{{!}} {{tlx|Navbar|2=''template name''}}
{{!}} {{navbar|navbar/doc}}
{{!}}-
{{!}} Different text
{{!}} {{tlx|Navbar|2=''template name''|3=text{{=}}This template:}}
{{!}} {{navbar|navbar/doc|text=This template:}}
{{!}}-
{{!}} Without "This box:" text
{{!}} {{tlx|Navbar|2=''template name''|3=plain{{=}}1}}
{{!}} {{navbar|navbar/doc|plain=1}}
{{!}}-
{{!}} Short version
{{!}} {{tlx|Navbar|2=''template name''|3=mini{{=}}1}}
{{!}} {{navbar|navbar/doc|mini=1}}
{{!}}-
{{!}} With a color option
{{!}} {{tlx|Navbar|2=''template name''|3=fontstyle{{=}}color:green}}
{{!}} {{navbar|navbar/doc|fontstyle=color:green}}
{{!}}-
{{!}} With brackets
{{!}} {{tlx|Navbar|2=''template name''|3=brackets{{=}}1}}
{{!}} {{navbar|navbar/doc|brackets=1}}
{{!}}-
{{!}} Custom namespace
{{!}} {{tlx|Navbar|2=''namespaced template name''|3=plain{{=}}1|4=brackets{{=}}1}}
{{!}} {{navbar|User:Example|plain=1|brackets=1}}
{{!}}{{)}}
== TemplateData ==
{{Navbar/doc}}
== Notes ==
Navbar is contained within a {{tag|div}} in order to accommodate a horizontal unnumbered list.
This means it cannot be placed inside a {{tag|span}} or other inline element, because Tidy will 'fix' situations where it finds block elements inside inline elements.
<!--- PLEASE ADD METADATA TO THE <includeonly> SECTION HERE --->
<includeonly>
[[Category:Formatting templates{{#translation:}}]]
</includeonly>
}}
</noinclude>
3f53ea49b7933ec59655f626eef09d907f4d3f53
Module:Navbar/styles.css
828
93
1325
2021-07-06T14:11:18Z
mw>ExE Boss
0
/* top */ Add {{[[Template:Shared Template Warning|Shared Template Warning]]}}
sanitized-css
text/css
/** {{Shared Template Warning}}
* This TemplateStyles page is separately used for [[Template:Navbar]]
* because of course there are two versions of the same template.
* Be careful when adjusting styles accordingly.
*/
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar ul {
display: inline;
white-space: nowrap;
}
.navbar li {
word-spacing: -0.125em;
}
/* Navbar styling when nested in navbox */
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
width: 6em;
}
daa254bc716c42f79e6be78a9d0a82bdbe57f9f2
Module:Template translation
828
10
19
2021-07-07T14:24:01Z
mw>Shirayuki
0
add exceptions for [[Help:Subpages/subpage]] and friends
Scribunto
text/plain
local this = {}
function this.checkLanguage(subpage, default)
--[[Check first if there's an any invalid character that would cause the
mw.language.isKnownLanguageTag function() to throw an exception:
- all ASCII controls in [\000-\031\127],
- double quote ("), sharp sign (#), ampersand (&), apostrophe ('),
- slash (/), colon (:), semicolon (;), lower than (<), greater than (>),
- brackets and braces ([, ], {, }), pipe (|), backslash (\\)
All other characters are accepted, including space and all non-ASCII
characters (including \192, which is invalid in UTF-8).
--]]
if mw.language.isValidCode(subpage) and mw.language.isKnownLanguageTag(subpage)
--[[However "SupportedLanguages" are too restrictive, as they discard many
valid BCP47 script variants (only because MediaWiki still does not
define automatic transliterators for them, e.g. "en-dsrt" or
"fr-brai" for French transliteration in Braille), and country variants,
(useful in localized data, even if they are no longer used for
translations, such as zh-cn, also useful for legacy codes).
We want to avoid matching subpagenames containing any uppercase letter,
(even if they are considered valid in BCP 47, in which they are
case-insensitive; they are not "SupportedLanguages" for MediaWiki, so
they are not "KnownLanguageTags" for MediaWiki).
To be more restrictive, we exclude any character
* that is not ASCII and not a lowercase letter, minus-hyphen, or digit,
or does not start by a letter or does not finish by a letter or digit;
* or that has more than 8 characters between hyphens;
* or that has two hyphens;
* or with specific uses in template subpages and unusable as languages.
--]]
or string.find(subpage, "^[%l][%-%d%l]*[%d%l]$") ~= nil
and string.find(subpage, "[%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l]") == nil
and string.find(subpage, "%-%-") == nil
and subpage ~= "doc"
and subpage ~= "layout"
and subpage ~= "sandbox"
and subpage ~= "testcases"
and subpage ~= "init"
and subpage ~= "preload"
and subpage ~= "subpage"
and subpage ~= "subpage2"
and subpage ~= "sub-subpage"
and subpage ~= "sub-sub-subpage"
and subpage ~= "sub-sub-sub-subpage"
then
return subpage
end
-- Otherwise there's currently no known language subpage
return default
end
--[[Get the last subpage of an arbitrary page if it is a translation.
To be used from templates.
]]
function this.getLanguageSubpage(frame)
local title = frame and frame.args[1]
if not title or title == '' then
title = mw.title.getCurrentTitle()
end
return this._getLanguageSubpage(title)
end
--[[Get the last subpage of an arbitrary page if it is a translation.
To be used from Lua.
]]
function this._getLanguageSubpage(title)
if type(title) == 'string' then
title = mw.title.new(title)
end
if not title then
-- invalid title
return mw.language.getContentLanguage():getCode()
end
--[[This code does not work in all namespaces where the Translate tool works.
-- It works in the main namespace on Meta because it allows subpages there
-- It would not work in the main namespace of English Wikipedia (but the
-- articles are monolignual on that wiki).
-- On Meta-Wiki the main space uses subpages and its pages are translated.
-- The Translate tool allows translatng pages in all namespaces, even if
-- the namespace officially does not have subpages.
-- On Meta-Wiki the Category namespace still does not have subpages enabled,
-- even if they would be very useful for categorizing templates, that DO have
-- subpages (for documentatio and tstboxes pages). This is a misconfiguration
-- bug of Meta-Wiki. The work-around is to split the full title and then
-- get the last titlepart.
local subpage = title.subpageText
--]]
local titleparts = mw.text.split(title.fullText, '/')
local subpage = titleparts[#titleparts]
return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
end
--[[Get the last subpage of the current page if it is a translation.
]]
function this.getCurrentLanguageSubpage()
return this._getLanguageSubpage(mw.title.getCurrentTitle())
end
--[[Get the first part of the language code of the subpage, before the '-'.
]]
function this.getMainLanguageSubpage()
parts = mw.text.split( this.getCurrentLanguageSubpage(), '-' )
return parts[1]
end
--[[Get the last subpage of the current frame if it is a translation.
Not used locally.
]]
function this.getFrameLanguageSubpage(frame)
return this._getLanguageSubpage(frame:getParent():getTitle())
end
--[[Get the language of the current page.
Not used locally.
]]
function this.getLanguage()
local subpage = mw.title.getCurrentTitle().subpageText
return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
end
--[[Get the language of the current frame.
Not used locally.
]]
function this.getFrameLanguage(frame)
local titleparts = mw.text.split(frame:getParent():getTitle(), '/')
local subpage = titleparts[#titleparts]
return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
end
function this.title(namespace, basepagename, subpage)
local message, title
local pagename = basepagename
if (subpage or '') ~= ''
then
pagename = pagename .. '/' .. subpage
end
local valid, title = xpcall(function()
return mw.title.new(pagename, namespace) -- costly
end, function(msg) -- catch undocumented exception (!?)
-- thrown when namespace does not exist. The doc still
-- says it should return a title, even in that case...
message = msg
end)
if valid and title ~= nil and (title.id or 0) ~= 0
then
return title
end
return { -- "pseudo" mw.title object with id = nil in case of error
prefixedText = pagename, -- the only property we need below
message = message -- only for debugging
}
end
--[[If on a translation subpage (like Foobar/de), this function returns
a given template in the same language, if the translation is available.
Otherwise, the template is returned in its default language, without
modification.
This is aimed at replacing the current implementation of Template:TNTN.
This version does not expand the returned template name: this solves the
problem of self-recursion in TNT when translatable templates need themselves
to transclude other translable templates (such as Tnavbar).
]]
function this.getTranslatedTemplate(frame, withStatus)
local args = frame.args
local pagename = args['template']
--[[Check whether the pagename is actually in the Template namespace, or
if we're transcluding a main-namespace page.
(added for backward compatibility of Template:TNT)
]]
local title
local namespace = args['tntns'] or ''
if (namespace ~= '') -- Checks for tntns parameter for custom ns.
then
title = this.title(namespace, pagename) -- Costly
else -- Supposes that set page is in ns10.
namespace = 'Template'
title = this.title(namespace, pagename) -- Costly
if title.id == nil
then -- not found in the Template namespace, assume the main namespace (for backward compatibility)
namespace = ''
title = this.title(namespace, pagename) -- Costly
end
end
-- Get the last subpage and check if it matches a known language code.
local subpage = args['uselang'] or ''
if (subpage == '')
then
subpage = this.getCurrentLanguageSubpage()
end
if (subpage == '')
then
-- Check if a translation of the pagename exists in English
local newtitle = this.title(namespace, pagename, 'en') -- Costly
-- Use the translation when it exists
if newtitle.id ~= nil
then
title = newtitle
end
else
-- Check if a translation of the pagename exists in that language
local newtitle = this.title(namespace, pagename, subpage) -- Costly
if newtitle.id == nil
then
-- Check if a translation of the pagename exists in English
newtitle = this.title(namespace, pagename, 'en') -- Costly
end
-- Use the translation when it exists
if newtitle.id ~= nil
then
title = newtitle
end
end
-- At this point the title should exist
if withStatus then
-- status returned to Lua function below
return title.prefixedText, title.id ~= nil
else
-- returned directly to MediaWiki
return title.prefixedText
end
end
--[[If on a translation subpage (like Foobar/de), this function renders
a given template in the same language, if the translation is available.
Otherwise, the template is rendered in its default language, without
modification.
This is aimed at replacing the current implementation of Template:TNT.
Note that translatable templates cannot transclude themselves other
translatable templates, as it will recurse on TNT. Use TNTN instead
to return only the effective template name to expand externally, with
template parameters also provided externally.
]]
function this.renderTranslatedTemplate(frame)
local title, found = this.getTranslatedTemplate(frame, true)
-- At this point the title should exist prior to performing the expansion
-- of the template, otherwise render a red link to the missing page
-- (resolved in its assumed namespace). If we don't tet this here, a
-- script error would be thrown. Returning a red link is consistant with
-- MediaWiki behavior when attempting to transclude inexistant templates.
if not found then
return '[[' .. title .. ']]'
end
-- Copy args pseudo-table to a proper table so we can feed it to expandTemplate.
-- Then render the pagename.
local args = frame.args
local pargs = (frame:getParent() or {}).args
local arguments = {}
if (args['noshift'] or '') == ''
then
for k, v in pairs(pargs) do
-- numbered args >= 1 need to be shifted
local n = tonumber(k) or 0
if (n > 0)
then
if (n >= 2)
then
arguments[n - 1] = v
end
else
arguments[k] = v
end
end
else -- special case where TNT is used as autotranslate
-- (don't shift again what is shifted in the invokation)
for k, v in pairs(pargs) do
arguments[k] = v
end
end
arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded
arguments['tntns'] = nil -- discard the specified namespace override
arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame
arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame
return frame:expandTemplate{title = ':' .. title, args = arguments}
end
--[[A helper for mocking TNT in Special:TemplateSandbox. TNT breaks
TemplateSandbox; mocking it with this method means templates won't be
localized but at least TemplateSandbox substitutions will work properly.
Won't work with complex uses.
]]
function this.mockTNT(frame)
local pargs = (frame:getParent() or {}).args
local arguments = {}
for k, v in pairs(pargs) do
-- numbered args >= 1 need to be shifted
local n = tonumber(k) or 0
if (n > 0)
then
if (n >= 2)
then
arguments[n - 1] = v
end
else
arguments[k] = v
end
end
if not pargs[1]
then
return ''
end
return frame:expandTemplate{title = 'Template:' .. pargs[1], args = arguments}
end
return this
d8b891aad5c405bb237bd0a79d564ccb6b8e946b
Template:Str right
10
414
1263
2021-07-07T17:21:27Z
mw>ExE Boss
0
Copied from [[c:Template:Str right]]
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0
|{{{1}}}
|{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | |
{{{{{|safesubst:}}}#invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }}
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1a455b5358c1f1bac690d40d8310e098b907075a
Template:Para
10
108
1327
2021-07-07T23:17:46Z
mw>ExE Boss
0
Use [[mw:Special:MyLanguage/Help:TemplateStyles|TemplateStyles]] ([[Template:Mono/styles.css]] and [[Template:Nowrap/styles.css]])
wikitext
text/x-wiki
<onlyinclude><!--
-->{{{{{|safesubst:}}}#if:{{{plain|}}}|<templatestyles src="Template:Mono/styles.css"/>}}<!--
-->{{{{{|safesubst:}}}#if:{{yesno|{{{nowrap|1}}}}}|<templatestyles src="Template:Nowrap/styles.css"/>}}<!--
--><{{{{{|safesubst:}}}#if:{{{plain|}}}<!--
-->|span class="monospaced {{{{{|safesubst:}}}#if:{{{{{|safesubst:}}}yesno|{{{nowrap|1}}}}}|nowrap}}"<!--
-->|code {{{{{|safesubst:}}}#if:{{{{{|safesubst:}}}yesno|{{{nowrap|1}}}}}|class="nowrap"}}<!--
-->}}>|<!--
-->{{{{{|safesubst:}}}#if:{{{1|<noinclude>1</noinclude>}}}<!--
-->|{{{1}}}=<!--
-->}}{{{2|}}}<!--
--></{{{{{|safesubst:}}}#if:{{{plain|}}}|span|code}}><!--
--></onlyinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
d8b23afbb00b5d5ac00ed7cf1135edfb6c75fe39
Template:Plainlist/styles.css
10
39
77
2021-07-11T13:19:09Z
mw>ExE Boss
0
Add leading comment
sanitized-css
text/css
/**
* Unbulleted lists
*/
.plainlist ul {
line-height: inherit;
list-style: none none;
margin: 0;
}
.plainlist ul li {
margin-bottom: 0;
}
7243fd4329145928d2b4b02fc42513ab65934318
Template:\sandbox
10
449
1347
2021-07-12T08:07:22Z
mw>ExE Boss
0
Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]>
wikitext
text/x-wiki
<onlyinclude>{{#ifeq:{{SUBPAGENAME}}|sandbox|/sandbox}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
b84c7b18d05a12c4da67f5f1a5e12c4371eea588
Module:Hatnote/styles.css
828
88
192
2021-07-12T19:22:27Z
wikipedia>Izno
0
per my talk page
sanitized-css
text/css
/* {{pp|small=y}} */
.hatnote {
font-style: italic;
}
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */
div.hatnote {
/* @noflip */
padding-left: 1.6em;
margin-bottom: 0.5em;
}
.hatnote i {
font-style: normal;
}
/* The templatestyles element inserts a link element before hatnotes.
* TODO: Remove link if/when WMF resolves T200206 */
.hatnote + link + .hatnote {
margin-top: -0.5em;
}
44680ffd6e888866df2cdfa0341af9c7b97da94c
Module:Message box/cmbox.css
828
444
1337
2021-07-15T19:08:22Z
mw>ExE Boss
0
[[mw:MediaWiki talk:Gadget-site.css#Last to TemplateStyles: mbox and MediaWiki:Gadget-enwp-boxes.css|MediaWiki talk:Gadget-site.css § Last to TemplateStyles: mbox and MediaWiki:Gadget-enwp-boxes.css]]
sanitized-css
text/css
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
/* Default "notice" blue */
background-color: #dfe8ff;
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Blue */
background-color: #d8e8ff;
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: #ffdbdb;
}
table.cmbox-content {
/* Orange */
background-color: #ffe7ce;
}
table.cmbox-style {
/* Yellow */
background-color: #fff9db;
}
table.cmbox-move {
/* Purple */
background-color: #e4d8ff;
}
table.cmbox-protection {
/* Gray-gold */
background-color: #efefe1;
}
4a01a155911e7f7e0e61ad9eecbe3d762883b93b
Module:Message box/ombox.css
828
33
65
2021-07-15T19:28:43Z
mw>ExE Boss
0
Fix {{[[Template:Ombox|Ombox]]|small=1}} styles comment
sanitized-css
text/css
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
e2c21da9b2e5ea3a68e2f5a7432cbfd3cfce80a8
Template:Transclude
10
439
1319
2021-07-17T12:18:06Z
mw>Mainframe98
0
Reverted edits by [[Special:Contribs/184.22.196.79|184.22.196.79]] ([[User talk:184.22.196.79|talk]]) to last version by ExE Boss
wikitext
text/x-wiki
<onlyinclude>{{#switch: {{NAMESPACE: {{{1}}} }}
|#default = {{FULLPAGENAME: {{{1}}} }} <!-- leading namespace prefix, eg "Template:Foo" -->
|{{ns:0}} =
{{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }}
| Template:{{{1}}} <!-- no leading colon, eg "Foo" -->
| {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article -->
}}
}}</onlyinclude>
{{Documentation}}
4865c652e363aa2057dba3e36aaffcdd76885a4e
Template:For
10
104
224
2021-07-17T12:58:12Z
wikipedia>Plastikspork
0
[[Wikipedia:Templates for discussion/Log/2021 July 8#Template:For]] closed as do not merge ([[WP:XFDC#4.0.12|XFDcloser]])
wikitext
text/x-wiki
<includeonly>{{#invoke:For|For}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
3f70c0fa7cd736071e7c6e7dcd90ff3704df26bb
Module:Separated entries
828
432
1305
2021-07-18T07:07:33Z
mw>ExE Boss
0
Copied from [[w:Module:Separated entries]]
Scribunto
text/plain
-- This module takes positional parameters as input and concatenates them with
-- an optional separator. The final separator (the "conjunction") can be
-- specified independently, enabling natural-language lists like
-- "foo, bar, baz and qux". The starting parameter can also be specified.
local compressSparseArray = require('Module:TableTools').compressSparseArray
local p = {}
function p._main(args)
local separator = args.separator
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
and mw.text.decode(args.separator) or ''
local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator
-- Discard values before the starting parameter.
local start = tonumber(args.start)
if start then
for i = 1, start - 1 do args[i] = nil end
end
-- Discard named parameters.
local values = compressSparseArray(args)
return mw.text.listToText(values, separator, conjunction)
end
local function makeInvokeFunction(separator, conjunction, first)
return function (frame)
local args = require('Module:Arguments').getArgs(frame)
args.separator = separator or args.separator
args.conjunction = conjunction or args.conjunction
args.first = first or args.first
return p._main(args)
end
end
p.main = makeInvokeFunction()
p.br = makeInvokeFunction('<br />')
p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain())
return p
e80231ff3de01afd7f62a94e0a34dc1e67504085
Template:Separated entries
10
433
1307
2021-07-18T07:11:08Z
mw>ExE Boss
0
Based on [[w:Template:Separated entries]]
wikitext
text/x-wiki
<onlyinclude>{{{{{|safesubst:}}}#invoke:Separated entries|main}}</onlyinclude>
{{Documentation}}
f242d7f2dfe32f26a4a0618a9b30a22925a9f79a
Module:List
828
30
59
2021-07-18T08:36:59Z
mw>ExE Boss
0
Only use main <div> tag when necessary
Scribunto
text/plain
-- This module outputs different kinds of lists. At the moment, bulleted,
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Flatlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for i, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create((
#data.classes > 0
or data.marginLeft
or data.style
) and 'div' or nil)
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for i, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
return p.renderList(data)
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame)
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
d701c0798e541793aa5ed1e9af50fc3b20548907
Template:Thin space
10
235
694
2021-07-22T18:00:13Z
wikipedia>MusikBot II
0
Protected "[[Template:Thin space]]": [[Wikipedia:High-risk templates|High-risk template or module]] ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<span style="white-space: nowrap;">{{#if:{{{1|}}}|{{#if:{{{2|}}}|| }}}}{{{1|}}} <!--
-->{{#if:{{{2|}}}|{{{2}}}}}{{#if:{{{3|}}}| {{{3}}}}}<!--
-->{{#if:{{{4|}}}| {{{4}}}}}{{#if:{{{5|}}}| {{{5}}}}}<!--
-->{{#if:{{{6|}}}| {{{6}}}}}{{#if:{{{7|}}}| {{{7}}}}}<!--
-->{{#if:{{{8|}}}| {{{8}}}}}{{#if:{{{9|}}}| {{{9}}}}}<!--
-->{{#if:{{{10|}}}| {{{10}}}}}</span><noinclude>
{{Documentation}}
<!-- Please add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
5f135f79d223a744b75485254555580623480420
Template:Mono/styles.css
10
36
71
2021-07-25T14:33:38Z
mw>ExE Boss
0
Linkify “[[Template:Mono]]”
sanitized-css
text/css
/* Styling for [[Template:Mono]] */
.monospaced {
/* Keep it like this: "monospace, monospace". Those are the rules from [[w:WP:MONO]]. */
font-family: monospace, monospace;
}
170e200cb4116c2055eb21c4e733217152b5a5fa
Template:Module rating/en
10
431
1303
2021-08-06T11:11:35Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude><includeonly>{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:OOjs UI icon text-style.svg|40x40px|link=]]
| alpha | a = [[File:OOjs UI icon bold-a.svg|40x40px|link=]]
| beta | b = [[File:OOjs UI icon bold-b.svg|40x40px|link=]]
| release | r | general | g = [[File:OOjs UI icon check-constructive.svg|40x40px|link=]]
| protected | protect | p = [[File:{{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|Cascade-protection-shackle.svg|{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop|Full-protection-shackle-red.svg|Semi-protection-shackle-no-text.svg}}}}|40x40px|link=]]
| semiprotected | semiprotect | semi = [[File:Semi-protection-shackle.svg|40x40px|link=]]
| #default = [[File:OOjs UI icon alert-destructive.svg|40x40px|link=]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = This module is rated as [[Special:MyLanguage/Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = This module is rated as [[Special:MyLanguage/Category:Modules in alpha|alpha]]. It is ready for third party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = This module is rated as [[Special:MyLanguage/Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = This module is rated as [[Special:MyLanguage/Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[w:WP:TESTCASES|sandbox testing]] rather than repeated trial-and-error editing.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = This module is [[Special:MyLanguage/Category:Modules subject to page protection|subject to {{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|cascading|page}} protection]]. It is a highly visible module in use by a very large number of pages. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Special:MyLanguage/Project:Protected page|protected]] from editing.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|1=Module rating is invalid or not specified.}}
}}
}}|{{error|1=Error: {{tl|Module rating}} must be placed in the Module namespace.}}|demospace={{{demospace|<noinclude>module</noinclude>}}}}}</includeonly><noinclude>
{{documentation|content=
This template is used to rate [[Lua/Overview|Lua modules]] by quality.
It is placed at the top of the module's /doc subpage.
It produces a message informing users about the rating system, and it also places the module into a tracking category.
== Usage ==
Basic usage:
{{pre|{{tlx|module rating|''rating''}}}}
Without categories:
{{pre|{{tlx|module rating|''rating''|3=nocat=true}}}}
If {{tlx|Module rating}} is used outside the Module namespace, an error message is shown: {{module rating}}
== Ratings ==
The rating should be placed in the first positional parameter.
There are five different ratings: '''pre-alpha'''{{int|comma-separator}}'''alpha'''{{int|comma-separator}}'''beta'''{{int|comma-separator}}'''release'''{{int|and}}{{int|word-separator}}'''protected'''.
There are also short alias codes for each of the ratings.
{{(!}} class="wikitable"
! Rating
! Aliases
! Result
{{!}}-
{{!}} <code>pre-alpha</code>
{{!}} <code>prealpha</code><br/><code>pa</code>
{{!}} {{module rating|pre-alpha|nocat=true|demospace=Module}}
{{!}}-
{{!}} <code>alpha</code>
{{!}} <code>a</code>
{{!}} {{module rating|alpha|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>beta</code>
{{!}} <code>b</code>
{{!}} {{module rating|beta|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>release</code>
{{!}} <code>r</code><br/><code>general</code><br/><code>g</code>
{{!}} {{module rating|release|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>protected</code>
{{!}} <code>protect</code><br/><code>p</code>
{{!}} {{module rating|protected|nocat=true|demospace=module}}
{{!}}-
{{!}} ''Anything else or if missing''
{{!}}
{{!}} {{module rating|prdaskidkated|nocat=true|demospace=module}}
{{!}}-
{{!)}}
== TemplateData ==
{{Module rating/doc}}
== Categories ==
The template will put modules in one of the following categories, according to the rating specified:
* {{ll|Category:Modules in pre-alpha development}}
* {{ll|Category:Modules in alpha}}
* {{ll|Category:Modules in beta}}
* {{ll|Category:Modules for general use}}
* {{ll|Category:Modules subject to page protection}}
These categories are suppressed on pages ending with /doc.
To suppress categories on all pages, you can use the code {{para|nocat|true}}.
== See also ==
* {{tl|module-rating categories}}
* [[Lua]]
* {{tl|Lua}}
}}
</noinclude>
be9721892adcac867736e318ab01f848049afb88
Template:Tmpl
10
415
1265
2021-08-08T13:43:06Z
mw>ExE Boss
0
/* template-documentation */ Use {{[[mw:Special:MyLanguage/Help:Substitution|subst]]:[[Template:InitDoc|InitDoc]]}}
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
c29b0448e5b4220ef09fba833ddabdebb7b41ceb
Template:Used in system
10
429
1297
2021-08-21T04:47:31Z
mw>Shirayuki
0
use [[Template:tmpl]]
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#switch:<translate></translate>
| =
{{ombox
| type = content
| text =
'''<translate><!--T:1--> This <tvar|1>{{lcfirst:{{NAMESPACE}}}}</> is used {{<tvar|2>#if:{{{1|}}}|{{{1}}}</>|in system messages}}.</translate>'''<br/>
<translate><!--T:2--> Changes to it can cause immediate changes to the MediaWiki user interface.</translate> <!--
-->{{tmpl|0=<translate><!--T:3--> To avoid large-scale disruption, any changes should first be tested in this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>'s [[<tvar|2>$1/sandbox</>|/sandbox]] or [[<tvar|3>$1/testcases</>|/testcases]] subpage, or in your own [[<tvar|4>Special:MyLanguage/Help:Subpages</>|user space]].</translate>
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}}
| #default = {{SUBJECTPAGENAME}}
}}<!--#switch-->
}}<!--tmpl--><!--
--><translate><!--T:4--> The tested changes can then be added in one single edit to this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>.</translate> <!--
-->{{tmpl|0=<translate><!--T:5--> Please discuss any changes {{<tvar|1>#if:{{{2|}}}</>|at <tvar|2>[[{{{2}}}]]</>|on the [[<tvar|3>$1</>|talk page]]}} before implementing them.</translate>
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}}
| #default = {{TALKPAGENAME}}
}}<!--#switch-->
}}<!--tmpl-->
}}
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{documentation}}
</noinclude>
9473a2f94595eec596f5d10d2e45e7711cff83cb
Template:Used in system/en
10
430
1299
2021-08-21T04:49:09Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#switch:
| =
{{ombox
| type = content
| text =
'''This {{lcfirst:{{NAMESPACE}}}} is used {{#if:{{{1|}}}|{{{1}}}|in system messages}}.'''<br/>
Changes to it can cause immediate changes to the MediaWiki user interface. <!--
-->{{tmpl|0=To avoid large-scale disruption, any changes should first be tested in this {{lcfirst:{{NAMESPACE}}}}'s [[$1/sandbox|/sandbox]] or [[$1/testcases|/testcases]] subpage, or in your own [[Special:MyLanguage/Help:Subpages|user space]].
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}}
| #default = {{SUBJECTPAGENAME}}
}}<!--#switch-->
}}<!--tmpl--><!--
-->The tested changes can then be added in one single edit to this {{lcfirst:{{NAMESPACE}}}}. <!--
-->{{tmpl|0=Please discuss any changes {{#if:{{{2|}}}|at [[{{{2}}}]]|on the [[$1|talk page]]}} before implementing them.
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}}
| #default = {{TALKPAGENAME}}
}}<!--#switch-->
}}<!--tmpl-->
}}
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{documentation}}
</noinclude>
10ae6df0c95ce682437a36e6cb3c517e21d200d0
Template:Template parameter usage
10
118
268
2021-08-21T18:02:56Z
wikipedia>SUM1
0
Added missing "lc" parameters; added optional "based" parameter to add text "based on this[/its] TemplateData" at end of template
wikitext
text/x-wiki
{{#switch:{{{label|}}}
|=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|C|c}}lick here] to see a monthly parameter usage report for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|this template}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|None|none=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
|for|For=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|[[Template:{{ROOTPAGENAME}}]]}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|#default=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{{label|}}}]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
}}<noinclude>
{{documentation}}
</noinclude>
b9cdd1b2e409313904f041c38562a3d6221cc017
Template:Documentation subpage/en
10
19
37
2021-08-22T09:04:11Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude>{{#switch:
| =
<includeonly><!--
-->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]]
| text =
'''This is a [[w:Wikipedia:Template documentation|documentation]] [[Special:MyLanguage/Help:Subpages|subpage]] for {{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}.'''<br /><!--
-->{{#if:{{{text2|}}}{{{text1|}}}
|It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{{text2|{{{text1}}}}}}.
|It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{SUBJECTSPACE}} page.
}}
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}}
| Template | Project = Template
| Module = Module
| User = User
| #default = MediaWiki
}} documentation pages{{#translation:}}]]
| [[Category:Documentation subpages without corresponding pages{{#translation:}}]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{Documentation|content=
== Usage ==
Use this template on Template Documentation subpage (/doc).
== See also ==
*{{tl|Documentation}}
*{{tl|tl}}
}}
</noinclude>
7ed5cbfd5118b37933b2c38487c1ab00f969bf46
Template:Int
10
407
1247
2021-08-25T22:06:06Z
mw>ExE Boss
0
Add parameter `missing`
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Int|renderIntMessage|{{{1}}}|missing={{{missing|}}}|lang={{{lang|}}}}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
33458d205943740a9f820054cc2950d639a84aa6
Template:TemplateData header
10
21
266
2021-08-29T21:32:29Z
wikipedia>SUM1
0
Added "based" parameter to other transclusion
wikitext
text/x-wiki
<div class="templatedata-header">{{#if:{{{noheader|}}}|<!--
noheader:
-->{{Template parameter usage|based=y}}|<!--
+header:
-->This is the {{#if:{{{nolink|}}}|<!--
+header, nolink TD
-->TemplateData|<!--
+header, +link [[TD]]; DEFAULT:
-->[[Wikipedia:TemplateData|TemplateData]]}}<!--
e.o. #if:nolink; DEFAULT:
--> for this template used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools. {{Template parameter usage|based=y}}<!--
e.o. #if:noheader
-->}}
'''TemplateData for {{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly><!--
check parameters
-->{{#invoke:Check for unknown parameters|check
|unknown={{template other|1=[[Category:Pages using TemplateData header with unknown parameters|_VALUE_]]}}
|template=Template:TemplateData header
|1 |nolink |noheader
|preview=<div class="error" style="font-weight:normal">Unknown parameter '_VALUE_' in [[Template:TemplateData header]].</div>
}}<!--
-->{{template other|{{sandbox other||
[[Category:Templates using TemplateData]]
}}}}</includeonly><!--
--><noinclude>{{Documentation}}</noinclude>
ddfbb4ae793846b96d4c06330417fa6ed4da2adc
Template:Ambox
10
437
1315
2021-09-01T23:24:23Z
mw>ExE Boss
0
Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]> and add comment about categories
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Message box|ambox}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
c1c08bfba73362a15b45ed57cd7458ff9fbc5413
Template:Cmbox
10
438
1317
2021-09-01T23:24:27Z
mw>ExE Boss
0
Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]>
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Message box|cmbox}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
04e229bdcc4ed5f8322f6a29df0d25d01316f5bf
Module:Redirect
828
69
144
2021-09-10T07:46:37Z
wikipedia>Johnuniq
0
restore p.getTargetFromText which is used by [[Module:RfD]] which is causing "Lua error in Module:RfD at line 87: attempt to call upvalue 'getTargetFromText' (a nil value)"
Scribunto
text/plain
-- This module provides functions for getting the target of a redirect page.
local p = {}
-- Gets a mw.title object, using pcall to avoid generating script errors if we
-- are over the expensive function count limit (among other possible causes).
local function getTitle(...)
local success, titleObj = pcall(mw.title.new, ...)
if success then
return titleObj
else
return nil
end
end
-- Gets the name of a page that a redirect leads to, or nil if it isn't a
-- redirect.
function p.getTargetFromText(text)
local target = string.match(
text,
"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]"
) or string.match(
text,
"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
)
return target and mw.uri.decode(target, 'PATH')
end
-- Gets the target of a redirect. If the page specified is not a redirect,
-- returns nil.
function p.getTarget(page, fulltext)
-- Get the title object. Both page names and title objects are allowed
-- as input.
local titleObj
if type(page) == 'string' or type(page) == 'number' then
titleObj = getTitle(page)
elseif type(page) == 'table' and type(page.getContent) == 'function' then
titleObj = page
else
error(string.format(
"bad argument #1 to 'getTarget'"
.. " (string, number, or title object expected, got %s)",
type(page)
), 2)
end
if not titleObj then
return nil
end
local targetTitle = titleObj.redirectTarget
if targetTitle then
if fulltext then
return targetTitle.fullText
else
return targetTitle.prefixedText
end
else
return nil
end
end
--[[
-- Given a single page name determines what page it redirects to and returns the
-- target page name, or the passed page name when not a redirect. The passed
-- page name can be given as plain text or as a page link.
--
-- Returns page name as plain text, or when the bracket parameter is given, as a
-- page link. Returns an error message when page does not exist or the redirect
-- target cannot be determined for some reason.
--]]
function p.luaMain(rname, bracket, fulltext)
if type(rname) ~= "string" or not rname:find("%S") then
return nil
end
bracket = bracket and "[[%s]]" or "%s"
rname = rname:match("%[%[(.+)%]%]") or rname
local target = p.getTarget(rname, fulltext)
local ret = target or rname
ret = getTitle(ret)
if ret then
if fulltext then
ret = ret.fullText
else
ret = ret.prefixedText
end
return bracket:format(ret)
else
return nil
end
end
-- Provides access to the luaMain function from wikitext.
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
return p.luaMain(args[1], args.bracket, args.fulltext) or ''
end
-- Returns true if the specified page is a redirect, and false otherwise.
function p.luaIsRedirect(page)
local titleObj = getTitle(page)
if not titleObj then
return false
end
if titleObj.isRedirect then
return true
else
return false
end
end
-- Provides access to the luaIsRedirect function from wikitext, returning 'yes'
-- if the specified page is a redirect, and the blank string otherwise.
function p.isRedirect(frame)
local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
if p.luaIsRedirect(args[1]) then
return 'yes'
else
return ''
end
end
return p
a224c45940343d66f49a78b0a39b2045e2c45d20
Template:TOC right
10
251
726
2021-09-17T13:06:17Z
wikipedia>Izno
0
don't emit style unless width exists
wikitext
text/x-wiki
<templatestyles src="Template:TOC_right/styles.css" />{{#if:{{{limit|}}}|<templatestyles src="Template:TOC limit/styles.css" />}}<!--
--><div class="tocright {{#if:{{{clear|}}}|tocright-clear-{{{clear|}}}}} {{#if:{{{limit|}}}|toclimit-{{{limit}}}}}" {{#if:{{{width|{{{1|}}}}}}|style="width: {{{width|{{{1}}}}}};"}}>__TOC__</div><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
67c60b46e441afa40d8c4c1227aa6580a0cda2e9
Template:TOC right/styles.css
10
252
728
2021-09-17T13:56:38Z
wikipedia>Izno
0
do the same thing I apparently did to tocleft much earlier
sanitized-css
text/css
/* {{pp-template}} */
/* The TOC is hidden on Minerva (mobile skin) for width < 720px so must also hide this wrapper */
@media all and (max-width: 720px) {
body.skin-minerva .tocright {
display: none;
}
.tocright {
width: 100% !important; /* fix the inline width while at small resolution */
}
}
@media all and (min-width: 720px) {
.tocright {
float: right;
clear: right;
width: auto;
margin: 0 0 0.5em 1em;
}
.tocright-clear-left {
clear: left;
}
.tocright-clear-both {
clear: both;
}
.tocright-clear-none {
clear: none;
}
}
60435a52ddabf7eb321fa80dbf78c0d63d13f95b
Template:PAGENAMETDOC
10
132
296
2021-09-19T22:49:59Z
wikipedia>JJMC89 bot III
0
Moving [[:Category:Wikipedia variable-like templates]] to [[:Category:Wikipedia magic word templates]] per [[Wikipedia:Categories for discussion/Log/2021 September 11#Category:Wikipedia variable-like templates]]
wikitext
text/x-wiki
{{#ifeq:{{#invoke:String|find|{{FULLPAGENAME}}|/sandbox%d*$|plain=false}}|0|{{{{#if:{{{1|}}}||FULL}}BASEPAGENAME}}|{{{{#if:{{{1|}}}||FULL}}PAGENAME}}}}<noinclude>
{{Documentation|content=
This template returns the current {{Tlx|FULLBASEPAGENAME}}, unless the title ends in <code>/sandbox</code> plus any number of digits, in which case it returns the {{tlx|FULLPAGENAME}}. It is primarily meant for demonstrating the sandbox version of templates in their documentation.
This template takes one numbered parameter (<code>1</code>); if anything is in this parameter then it will return <code>{{BASEPAGENAME}}</code> and <code>{{PAGENAME}}</code>, which have no namespace prefix.
}}
[[Category:Wikipedia magic word templates]]
</noinclude>
ae0c3ac1a7415671c46f970d5faad2fd708640b0
Module:Sidebar/styles.css
828
101
218
2021-09-20T01:15:45Z
wikipedia>Goszei
0
self-rv, it's a little tight
sanitized-css
text/css
/* {{pp-template}} */
/* TODO: Invert width design to be "mobile first" */
.sidebar {
/* TODO: Ask if we should have max-width 22em instead */
width: 22em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
/* @noflip */
margin: 0.5em 0 1em 1em;
background: #f8f9fa;
border: 1px solid #aaa;
padding: 0.2em;
text-align: center;
line-height: 1.4em;
font-size: 88%;
border-collapse: collapse;
/* Timeless has display: none on .nomobile at mobile resolutions, so we
* unhide it with display: table and let precedence and proximity win.
*/
display: table;
}
/* Unfortunately, so does Minerva desktop, except Minerva drops an
* !important on the declaration. So we have to be mean for Minerva users.
* Mobile removes the element entirely with `wgMFRemovableClasses` in
* https://github.com/wikimedia/operations-mediawiki-config/blob/master/
wmf-config/InitialiseSettings.php#L16992
* which is why displaying it categorically with display: table works.
* We don't really want to expose the generic user in the wild on mobile to have
* to deal with sidebars. (Maybe the ones with collapsible lists, so that
* might be an improvement. That is blocked on [[:phab:T111565]].)
*/
body.skin-minerva .sidebar {
display: table !important;
/* also, minerva is way too aggressive about other stylings on tables.
* TODO remove when this template gets moved to a div. plans on talk page.
* We always float right on Minerva because that's a lot of extra CSS
* otherwise. */
float: right !important;
margin: 0.5em 0 1em 1em !important;
}
.sidebar-subgroup {
width: 100%;
margin: 0;
border-spacing: 0;
}
.sidebar-left {
/* @noflip */
float: left;
/* @noflip */
clear: left;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-none {
float: none;
clear: both;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-outer-title {
padding: 0 0.4em 0.2em;
font-size: 125%;
line-height: 1.2em;
font-weight: bold;
}
.sidebar-top-image {
padding: 0.4em;
}
.sidebar-top-caption,
.sidebar-pretitle-with-top-image,
.sidebar-caption {
padding: 0.2em 0.4em 0;
line-height: 1.2em;
}
.sidebar-pretitle {
padding: 0.4em 0.4em 0;
line-height: 1.2em;
}
.sidebar-title,
.sidebar-title-with-pretitle {
padding: 0.2em 0.8em;
font-size: 145%;
line-height: 1.2em;
}
.sidebar-title-with-pretitle {
padding: 0.1em 0.4em;
}
.sidebar-image {
padding: 0.2em 0.4em 0.4em;
}
.sidebar-heading {
padding: 0.1em 0.4em;
}
.sidebar-content {
padding: 0 0.5em 0.4em;
}
.sidebar-content-with-subgroup {
padding: 0.1em 0.4em 0.2em;
}
.sidebar-above,
.sidebar-below {
padding: 0.3em 0.8em;
font-weight: bold;
}
.sidebar-collapse .sidebar-above,
.sidebar-collapse .sidebar-below {
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
.sidebar-navbar {
text-align: right;
font-size: 115%;
padding: 0 0.4em 0.4em;
}
.sidebar-list-title {
padding: 0 0.4em;
text-align: left;
font-weight: bold;
line-height: 1.6em;
font-size: 105%;
}
/* centered text with mw-collapsible headers is finicky */
.sidebar-list-title-c {
padding: 0 0.4em;
text-align: center;
margin: 0 3.3em;
}
@media (max-width: 720px) {
/* users have wide latitude to set arbitrary width and margin :(
"Super-specific" selector to prevent overriding this appearance by
lower level sidebars too */
body.mediawiki .sidebar {
width: 100% !important;
clear: both;
float: none !important; /* Remove when we div based; Minerva is dumb */
margin-left: 0 !important;
margin-right: 0 !important;
}
/* TODO: We might consider making all links wrap at small resolutions and then
* only introduce nowrap at higher resolutions. Do when we invert the media
* query.
*/
}
7d621b35a37807a103b59075851fe36201204ceb
Module:Message box/configuration
828
14
27
2021-10-01T02:27:01Z
mw>Pppery
0
Remove error category; it was the idea of one enwiki-an years ago and there's no evidence anyone on MediaWiki.org cares
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ambox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'plainlinks', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = nil,
templateErrorParamsToCheck = {'issue', 'fix', 'subst'}
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'cmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'cmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
caution = {
class = 'cmbox-style',
image = 'Ambox warning yellow.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'cmbox'},
imageEmptyCell = true
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'OOjs UI icon clock-destructive.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'OOjs UI icon information-progressive.svg'
},
system = {
class = 'fmbox-system',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'plainlinks', 'fmbox'},
imageEmptyCell = false,
imageRightNone = false
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'imbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'imbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox license.png' -- @todo We need an SVG version of this
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg'
},
notice = {
class = 'imbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
usePlainlinksParam = true,
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ombox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
critical = {
class = 'mbox-critical',
image = 'OOjs UI icon clock-destructive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'tmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'tmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
imageEmptyCellStyle = true,
templateCategory = 'Talk message boxes'
}
}
d8cf419a57983f67944903d17535c0ee0780ceb6
Template:Module rating
10
196
1301
2021-10-07T03:29:11Z
mw>Shirayuki
0
Reverted edits by [[Special:Contribs/Thingofme|Thingofme]] ([[User talk:Thingofme|talk]]) to last version by ExE Boss
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude><includeonly>{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:OOjs UI icon text-style.svg|40x40px|link=]]
| alpha | a = [[File:OOjs UI icon bold-a.svg|40x40px|link=]]
| beta | b = [[File:OOjs UI icon bold-b.svg|40x40px|link=]]
| release | r | general | g = [[File:OOjs UI icon check-constructive.svg|40x40px|link=]]
| protected | protect | p = [[File:{{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|Cascade-protection-shackle.svg|{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop|Full-protection-shackle-red.svg|Semi-protection-shackle-no-text.svg}}}}|40x40px|link=]]
| semiprotected | semiprotect | semi = [[File:Semi-protection-shackle.svg|40x40px|link=]]
| #default = [[File:OOjs UI icon alert-destructive.svg|40x40px|link=]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = <translate><!--T:1--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in pre-alpha development</tvar>|pre-alpha]].</translate> <translate><!--T:2--> It is unfinished, and may or may not be in active development.</translate> <translate><!--T:3--> It should not be used from article namespace pages.</translate> <translate><!--T:4--> Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.</translate><!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = <translate><!--T:20--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in alpha</tvar>|alpha]].</translate> <translate><!--T:21--> It is ready for third party input, and may be used on a few pages to see if problems arise, but should be watched.</translate> <translate><!--T:22--> Suggestions for new features or changes in their input and output mechanisms are welcome.</translate><!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = <translate><!--T:23--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in beta</tvar>|beta]], and is ready for widespread use.</translate> <translate><!--T:24--> It is still new and should be used with some caution to ensure the results are as expected.</translate><!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = <translate><!--T:25--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules for general use</tvar>|ready for general use]].</translate> <translate><!--T:26--> It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate.</translate> <translate><!--T:27--> It is ready to mention on help pages and other resources as an option for new users to learn.</translate> <translate><!--T:28--> To reduce server load and bad output, it should be improved by [[w:WP:TESTCASES|sandbox testing]] rather than repeated trial-and-error editing.</translate><!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = <translate><!--T:29--> This module is [[<tvar name=1>Special:MyLanguage/Category:Modules subject to page protection</tvar>|subject to {{<tvar name=2>#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}</tvar>|cascading|page}} protection]].</translate> <translate><!--T:30--> It is a highly visible module in use by a very large number of pages.</translate> <translate><!--T:31--> Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[<tvar name=1>Special:MyLanguage/Project:Protected page</tvar>|protected]] from editing.</translate><!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|1=<translate><!--T:17--> Module rating is invalid or not specified.</translate>}}
}}
}}|{{error|1=<translate><!--T:18--> Error:</translate> <translate><!--T:19--> <tvar name=1>{{tl|Module rating}}</tvar> must be placed in the Module namespace.</translate>}}|demospace={{{demospace|<noinclude>module</noinclude>}}}}}</includeonly><noinclude>
{{documentation|content=
<translate><!--T:5--> This template is used to rate [[Lua/Overview|Lua modules]] by quality.</translate>
<translate><!--T:6--> It is placed at the top of the module's /doc subpage.</translate>
<translate><!--T:7--> It produces a message informing users about the rating system, and it also places the module into a tracking category.</translate>
<translate>
== Usage == <!--T:8-->
<!--T:9-->
Basic usage:
</translate>
{{pre|{{tlx|module rating|''rating''}}}}
<translate><!--T:10--> Without categories:</translate>
{{pre|{{tlx|module rating|''rating''|3=nocat=true}}}}
<translate><!--T:32--> If <tvar name=1>{{tlx|Module rating}}</tvar> is used outside the Module namespace, an error message is shown: <tvar name=2>{{module rating}}</tvar></translate>
<translate>
== Ratings == <!--T:11-->
</translate>
<translate><!--T:33--> The rating should be placed in the first positional parameter.</translate>
<translate><!--T:34--> There are five different ratings: <tvar name=1>'''pre-alpha'''{{int|comma-separator}}'''alpha'''{{int|comma-separator}}'''beta'''{{int|comma-separator}}'''release'''{{int|and}}{{int|word-separator}}'''protected'''</tvar>.</translate>
<translate><!--T:35--> There are also short alias codes for each of the ratings.</translate>
{{(!}} class="wikitable"
! <translate><!--T:12--> Rating</translate>
! <translate><!--T:13--> Aliases</translate>
! <translate><!--T:14--> Result</translate>
{{!}}-
{{!}} <code>pre-alpha</code>
{{!}} <code>prealpha</code><br/><code>pa</code>
{{!}} {{module rating|pre-alpha|nocat=true|demospace=Module}}
{{!}}-
{{!}} <code>alpha</code>
{{!}} <code>a</code>
{{!}} {{module rating|alpha|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>beta</code>
{{!}} <code>b</code>
{{!}} {{module rating|beta|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>release</code>
{{!}} <code>r</code><br/><code>general</code><br/><code>g</code>
{{!}} {{module rating|release|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>protected</code>
{{!}} <code>protect</code><br/><code>p</code>
{{!}} {{module rating|protected|nocat=true|demospace=module}}
{{!}}-
{{!}} <translate><!--T:36--> ''Anything else or if missing''</translate>
{{!}}
{{!}} {{module rating|prdaskidkated|nocat=true|demospace=module}}
{{!}}-
{{!)}}
== TemplateData ==
{{Module rating/doc}}
<translate>
== Categories == <!--T:15-->
<!--T:37-->
The template will put modules in one of the following categories, according to the rating specified:
</translate>
* {{ll|Category:Modules in pre-alpha development}}
* {{ll|Category:Modules in alpha}}
* {{ll|Category:Modules in beta}}
* {{ll|Category:Modules for general use}}
* {{ll|Category:Modules subject to page protection}}
<translate><!--T:38--> These categories are suppressed on pages ending with /doc.</translate>
<translate><!--T:39--> To suppress categories on all pages, you can use the code <tvar name=1>{{para|nocat|true}}</tvar>.</translate>
<translate>
== See also == <!--T:16-->
</translate>
* {{tl|module-rating categories}}
* [[Lua]]
* {{tl|Lua}}
}}
</noinclude>
4db82a1e955341afc1ffdaee6c12ba1f2929b3f5
Template:Cmbox/doc
10
450
1349
2021-10-14T14:48:43Z
mw>Keymap9
0
PNG --> SVG
wikitext
text/x-wiki
{{Mbox templates}}
{{Documentation subpage}}
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
{{Lua|Module:Message box{{\sandbox}}}}
{{Uses TemplateStyles|Module:Message box/ambox.css}}
This is the {{tl|Cmbox}} (['''C''']ategory ['''m''']essage ['''box''']) metatemplate.
It is used to build message box templates for category pages. It offers several different colours, uses default images if no image parameter is given, and it has some other features.
This template works almost exactly like {{tl|Ambox}} and uses the same parameters.
=== Usage ===
Simple usage example:
<pre>
{{cmbox | text = Some text.}}
</pre>
{{cmbox{{\sandbox}} | text = Some text.}}
Complex example:
<pre>
{{cmbox
| type = style
| image = [[File:Emblem-question-yellow.svg|40px]]
| style = width: 400px;
| textstyle = color: red; font-weight: bold; font-style: italic;
| text = The message body text.
}}
</pre>
{{cmbox{{\sandbox}}
| type = style
| image = [[File:Emblem-question-yellow.svg|40px]]
| style = width: 400px;
| textstyle = color: red; font-weight: bold; font-style: italic;
| text = The message body text.
}}
=== Category message box types ===
The following examples use different '''type''' parameters but use no image parameters, thus they use the default images for each type.
{{cmbox{{\sandbox}}
| type = speedy
| text = type=<u>speedy</u> – Speedy deletion templates such as {{tl|db-c1}}.
}}
{{cmbox{{\sandbox}}
| type = delete
| text = type=<u>delete</u> – Deletion templates such as {{tl|cfd}}.
}}
{{cmbox{{\sandbox}}
| type = content
| text = type=<u>content</u> – Major warnings and problems such as {{tl|Categorization of people disputed}}.
}}
{{cmbox{{\sandbox}}
| type = style
| text = type=<u>style</u> – Minor warnings and problems such as {{tl|Underpopulated category}}.
}}
{{cmbox{{\sandbox}}
| type = notice
| text = type=<u>notice</u> – Notices and messages of any kind, both permanent and temporary.
}}
{{cmbox{{\sandbox}}
| type = move
| text = type=<u>move</u> – Move, merge, and split messages and proposals such as {{tl|Category redirect}}.
}}
{{cmbox{{\sandbox}}
| type = protection
| text = type=<u>protection</u> – Protection templates such as {{tl|pp}} when shown on a category page.
}}
=== Other images ===
The default images shown above are mostly for convenience. In many cases it is more appropriate to use more specific images. These examples use the '''image''' parameter to specify an image other than the default images.
{{cmbox{{\sandbox}}
| type = style
| image = [[File:Sub-arrows.svg|40px]]
| text = type = style<br />image = <nowiki>[[File:Sub-arrows.svg|40px]]</nowiki><br />This image is used for {{tl|Very large}} and {{tl|Category diffuse}}.
}}
{{cmbox{{\sandbox}}
| type = move
| image = [[File:Redirect arrow.svg|52px]]
| text = type = move<br />image = <nowiki>[[File:Redirect arrow.svg|52px]]</nowiki><br />This image is used for {{tl|Category redirect}}.
}}
=== Special ===
Some other parameter combinations.
{{cmbox{{\sandbox}}
| text = No type and no image given ('''default''')
}}
{{cmbox{{\sandbox}}
| image = none
| text = No type and '''image=none''' – No image is used and the '''text''' uses the whole message box area.
}}
{{cmbox{{\sandbox}}
| image = [[File:Gnome globe current event.svg|42px]]
| imageright = [[File:Nuvola apps bookcase.svg|40px]]
| text = image = <nowiki>[[File:Gnome globe current event.svg|42px]]</nowiki><br />imageright = <nowiki>[[File:Nuvola apps bookcase.svg|40px]]</nowiki>
}}
{{cmbox{{\sandbox}}
| image = [[File:Gnome globe current event.svg|42px]]
| imageright = [[File:Shuttle.svg|20px]]
| text = '''This category lists articles about current and recent [[w:Spaceflight|spaceflights]].'''<br />It is populated by the {{tl|Current spaceflight}} template.
}}
=== Parameters ===
List of all parameters:
<pre>
{{cmbox
| type = speedy / delete / content / style / notice / move / protection
| image = none / [[File:Some image.svg|40px]]
| imageright = [[File:Some image.svg|40px]]
| class = A custom CSS class to apply to the box
| style = CSS values
| textstyle = CSS values
| plainlinks = no
| text = The message body text.
}}
</pre>
'''type'''
:If no '''type''' parameter is given, the template defaults to type '''notice'''. That means it gets a blue background.
'''image'''
:'''No parameter''' = If no '''image''' parameter is given, the template uses a default image. Which default image it uses depends on the '''type''' parameter.
:'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size).
::For example: <code><nowiki>image = [[File:Sub-arrows.svg|40px]]</nowiki></code>
:'''none''' = Means that no image is used.
'''imageright'''
:'''No parameter''' = If no '''imageright''' parameter is given, no image is shown on the right side.
:'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size).
::For example: <code><nowiki>imageright = [[File:Nuvola apps bookcase.svg|40px]]</nowiki></code>
:'''Anything''' = Any other object that you want to show on the right side.
'''style'''
:An optional [[w:Cascading Style Sheets|CSS]] value used by the entire message box table. Without quotation marks <code>" "</code>.
::For example: <code>style = margin-bottom: 0.5em;</code>
'''textstyle'''
:An optional [[w:Cascading Style Sheets|CSS]] value used by the text cell.
::For example: <code>textstyle = text-align: center;</code>
'''plainlinks'''
:Normally on Wikipedia, external links have an arrow icon next to them, like this: [http://www.example.com Example.com]. However, in message boxes, the arrow icon is suppressed by default, like this: <span class="plainlinks">[http://www.example.com Example.com]</span>. To get the normal style of external link with the arrow icon, use {{para|plainlinks|no}}.
'''text'''
:The message body text.
=== Technical details ===
If you need to use special characters in the text parameter then you need to escape them like this:
<pre>
{{cmbox
| text = <div>
Equal sign = and a start and end brace { } work fine as they are.
But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>.
And now a pipe and end braces <nowiki>|}}</nowiki>.
</div>
}}
</pre>
{{cmbox{{\sandbox}}
| text = <div>
Equal sign = and a start and end brace { } work fine as they are.
But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>.
And now a pipe and end braces <nowiki>|}}</nowiki>.
</div>
}}
This template uses the cmbox CSS classes in {{Blue|MediaWiki:Common.css}} for most of its looks, thus it is fully skinnable.
Internally this meta-template uses HTML markup instead of wiki markup for the table code. That is the usual way we make meta-templates since wiki markup has several drawbacks. For instance it makes it harder to use [[Help:Extension:ParserFunctions|parser functions]] and special characters in parameters.
The default images for this meta-template are in PNG format instead of SVG format. The main reason is that some older web browsers have trouble with the transparent background that MediaWiki renders for SVG images. The PNG images here have hand-optimised transparent background colour so they look good in all browsers. Note that SVG icons only look somewhat bad in the old browsers, thus such hand optimisation is only worth the trouble for very widely used icons.
For more technical details see the [[Template talk:Cmbox|talk page]]. Since this template works almost exactly like the other mboxes, their talk pages and related pages might also contain more details (see the [[#See also|See also]] section below).
== TemplateData ==
{{Mbox/TemplateData}}
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Mbox templates{{#translation:}}]]
}}</includeonly>
5d5a78d9d3dac08ea8c76d1802b8e71065e9b565
Template:Module other
10
167
552
385
2021-10-20T19:50:22Z
wikipedia>MusikBot II
0
Changed protection settings for "[[Template:Module other]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 3570 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite))
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Module}}
| module
| other
}}
}}
| module = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
503694836c1b07142e63fd35d8be69ec8bb9ffe7
Template:Italic title
10
184
529
2021-10-22T16:08:51Z
wikipedia>Gonnym
0
includeonly
wikitext
text/x-wiki
<includeonly>{{#invoke:Italic title|main}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata. -->
</noinclude>
aa77d0fbc6bb86266d633b290b7ab258cc69c8b8
Template:!)
10
427
1293
2021-11-04T17:50:34Z
mw>Clump
0
Reverted edits by [[Special:Contribs/110.54.165.94|110.54.165.94]] ([[User talk:110.54.165.94|talk]]) to last version by Clump
wikitext
text/x-wiki
<onlyinclude>|}</onlyinclude>
{{Documentation}}
469fe8c3efa0a39c92333858a80cd9d9b8b82968
Template:Main
10
81
176
2021-11-07T22:34:09Z
wikipedia>Nihiltres
0
Includeonly the template to avoid errors on the template pages
wikitext
text/x-wiki
<includeonly>{{#invoke:Labelled list hatnote|labelledList|Main article|Main articles|Main page|Main pages}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
99ebf54e265aa9354bc4861d3b0da913f1441ede
Template:Lua sidebar
10
129
290
2021-11-15T22:24:39Z
wikipedia>Izno
0
reduce expansion size slightly
wikitext
text/x-wiki
{{Sidebar
| class = lua-sidebar
| templatestyles = Template:Lua sidebar/styles.css
| title = Related pages
| content1 = {{plainlist}}
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|Template]] {{#if:{{#invoke:redirect|isRedirect|Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}}
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Template sandbox]]
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Template testcases]]
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Template doc]]
* [[Special:PrefixIndex/Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/|Template subpages]]
* [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|Module]] {{#if:{{#invoke:redirect|isRedirect|Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}}
* [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Module sandbox]]
* [[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Module testcases]]
* [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Module doc]]
* [[Special:PrefixIndex/Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/|Module subpages]]
{{endplainlist}}
| content2 = {{{1|}}}
}}<noinclude>
{{Documentation}}
</noinclude>
f11e49d67a400d29f6d73720fea7eb5a273ab663
Template:Never substitute
10
159
365
2021-12-07T15:43:38Z
wikipedia>Joe Roe
0
Undid revision 1043568500 by [[Special:Contributions/The Page Maker II|The Page Maker II]] ([[User talk:The Page Maker II|talk]]): a technical requirement is not a request
wikitext
text/x-wiki
{{Ombox
|type=notice
|text='''This template should {{em|not}} be [[Wikipedia:Substitution|substituted]].''' {{{1|}}}
}}<noinclude>
{{Documentation}}
</noinclude>
ed10c57c4f8088f4a40cd7d066ae311218883d20
Template:Main other
10
75
158
2021-12-10T16:08:06Z
wikipedia>Xaosflux
0
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:0}}
| main
| other
}}
}}
| main = {{{1|}}}
| other
| #default = {{{2|}}}
}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
86ad907ffeea3cc545159e00cd1f2d6433946450
Module:Navbox/styles.css
828
96
208
2021-12-21T22:10:10Z
wikipedia>Izno
0
remove qualifications on th - this will remove styling from "hand-crafted" navboxes, but there's no other elegant way to deal with it. see talk page
sanitized-css
text/css
/* {{pp|small=y}} */
.navbox {
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */
.navbox + .navbox-styles + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em;
line-height: 1.5em;
text-align: center;
}
.navbox-group {
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd;
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox-list-with-group {
text-align: left;
border-left-width: 2px;
border-left-style: solid;
}
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: #ccf; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: #ddf; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background-color: #f7f7f7;
}
.navbox-odd {
background-color: transparent;
}
/* TODO: figure out how to remove reliance on td as structure */
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
}
e80b0d7a5770e6e105dab832deb6c37a5245ebc6
Module:Hatnote list
828
89
194
2021-12-26T20:05:24Z
wikipedia>Nihiltres
0
Undid revision 1062166786 by [[Special:Contributions/Matthiaspaul|Matthiaspaul]] ([[User talk:Matthiaspaul|talk]]); should be fixed now, and if not, please ping me with examples as I couldn't reproduce the original error
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote list --
-- --
-- This module produces and formats lists for use in hatnotes. In particular, --
-- it implements the for-see list, i.e. lists of "For X, see Y" statements, --
-- as used in {{about}}, {{redirect}}, and their variants. Also introduced --
-- are andList & orList helpers for formatting lists with those conjunctions. --
--------------------------------------------------------------------------------
local mArguments --initialize lazily
local mFormatLink = require('Module:Format link')
local mHatnote = require('Module:Hatnote')
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
--------------------------------------------------------------------------------
-- List stringification helper functions
--
-- These functions are used for stringifying lists, usually page lists inside
-- the "Y" portion of "For X, see Y" for-see items.
--------------------------------------------------------------------------------
--default options table used across the list stringification functions
local stringifyListDefaultOptions = {
conjunction = "and",
separator = ",",
altSeparator = ";",
space = " ",
formatted = false
}
--Searches display text only
local function searchDisp(haystack, needle)
return string.find(
string.sub(haystack, (string.find(haystack, '|') or 0) + 1), needle
)
end
-- Stringifies a list generically; probably shouldn't be used directly
local function stringifyList(list, options)
-- Type-checks, defaults, and a shortcut
checkType("stringifyList", 1, list, "table")
if #list == 0 then return nil end
checkType("stringifyList", 2, options, "table", true)
options = options or {}
for k, v in pairs(stringifyListDefaultOptions) do
if options[k] == nil then options[k] = v end
end
local s = options.space
-- Format the list if requested
if options.formatted then
list = mFormatLink.formatPages(
{categorizeMissing = mHatnote.missingTargetCat}, list
)
end
-- Set the separator; if any item contains it, use the alternate separator
local separator = options.separator
for k, v in pairs(list) do
if searchDisp(v, separator) then
separator = options.altSeparator
break
end
end
-- Set the conjunction, apply Oxford comma, and force a comma if #1 has "§"
local conjunction = s .. options.conjunction .. s
if #list == 2 and searchDisp(list[1], "§") or #list > 2 then
conjunction = separator .. conjunction
end
-- Return the formatted string
return mw.text.listToText(list, separator .. s, conjunction)
end
--DRY function
function p.conjList (conj, list, fmt)
return stringifyList(list, {conjunction = conj, formatted = fmt})
end
-- Stringifies lists with "and" or "or"
function p.andList (...) return p.conjList("and", ...) end
function p.orList (...) return p.conjList("or", ...) end
--------------------------------------------------------------------------------
-- For see
--
-- Makes a "For X, see [[Y]]." list from raw parameters. Intended for the
-- {{about}} and {{redirect}} templates and their variants.
--------------------------------------------------------------------------------
--default options table used across the forSee family of functions
local forSeeDefaultOptions = {
andKeyword = 'and',
title = mw.title.getCurrentTitle().text,
otherText = 'other uses',
forSeeForm = 'For %s, see %s.',
}
--Collapses duplicate punctuation
local function punctuationCollapse (text)
local replacements = {
["%.%.$"] = ".",
["%?%.$"] = "?",
["%!%.$"] = "!",
["%.%]%]%.$"] = ".]]",
["%?%]%]%.$"] = "?]]",
["%!%]%]%.$"] = "!]]"
}
for k, v in pairs(replacements) do text = string.gsub(text, k, v) end
return text
end
-- Structures arguments into a table for stringification, & options
function p.forSeeArgsToTable (args, from, options)
-- Type-checks and defaults
checkType("forSeeArgsToTable", 1, args, 'table')
checkType("forSeeArgsToTable", 2, from, 'number', true)
from = from or 1
checkType("forSeeArgsToTable", 3, options, 'table', true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- maxArg's gotten manually because getArgs() and table.maxn aren't friends
local maxArg = 0
for k, v in pairs(args) do
if type(k) == 'number' and k > maxArg then maxArg = k end
end
-- Structure the data out from the parameter list:
-- * forTable is the wrapper table, with forRow rows
-- * Rows are tables of a "use" string & a "pages" table of pagename strings
-- * Blanks are left empty for defaulting elsewhere, but can terminate list
local forTable = {}
local i = from
local terminated = false
-- If there is extra text, and no arguments are given, give nil value
-- to not produce default of "For other uses, see foo (disambiguation)"
if options.extratext and i > maxArg then return nil end
-- Loop to generate rows
repeat
-- New empty row
local forRow = {}
-- On blank use, assume list's ended & break at end of this loop
forRow.use = args[i]
if not args[i] then terminated = true end
-- New empty list of pages
forRow.pages = {}
-- Insert first pages item if present
table.insert(forRow.pages, args[i + 1])
-- If the param after next is "and", do inner loop to collect params
-- until the "and"'s stop. Blanks are ignored: "1|and||and|3" → {1, 3}
while args[i + 2] == options.andKeyword do
if args[i + 3] then
table.insert(forRow.pages, args[i + 3])
end
-- Increment to next "and"
i = i + 2
end
-- Increment to next use
i = i + 2
-- Append the row
table.insert(forTable, forRow)
until terminated or i > maxArg
return forTable
end
-- Stringifies a table as formatted by forSeeArgsToTable
function p.forSeeTableToString (forSeeTable, options)
-- Type-checks and defaults
checkType("forSeeTableToString", 1, forSeeTable, "table", true)
checkType("forSeeTableToString", 2, options, "table", true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- Stringify each for-see item into a list
local strList = {}
if forSeeTable then
for k, v in pairs(forSeeTable) do
local useStr = v.use or options.otherText
local pagesStr =
p.andList(v.pages, true) or
mFormatLink._formatLink{
categorizeMissing = mHatnote.missingTargetCat,
link = mHatnote.disambiguate(options.title)
}
local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)
forSeeStr = punctuationCollapse(forSeeStr)
table.insert(strList, forSeeStr)
end
end
if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..'.')) end
-- Return the concatenated list
return table.concat(strList, ' ')
end
-- Produces a "For X, see [[Y]]" string from arguments. Expects index gaps
-- but not blank/whitespace values. Ignores named args and args < "from".
function p._forSee (args, from, options)
local forSeeTable = p.forSeeArgsToTable(args, from, options)
return p.forSeeTableToString(forSeeTable, options)
end
-- As _forSee, but uses the frame.
function p.forSee (frame, from, options)
mArguments = require('Module:Arguments')
return p._forSee(mArguments.getArgs(frame), from, options)
end
return p
d0828422b1aa0d0d0092d699d059c9e882260398
Template:FULLROOTPAGENAME
10
72
150
2022-01-02T08:54:02Z
wikipedia>Dinoguy1000
0
fix "|=foo" bug
wikitext
text/x-wiki
{{ safesubst:<noinclude/>#if: {{ safesubst:<noinclude/>Ns has subpages | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{ safesubst:<noinclude/>NAMESPACE:{{{1}}}}}|{{ safesubst:<noinclude/>NAMESPACE}}}} }}
| {{ safesubst:<noinclude/>#titleparts:{{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}|1}}
| {{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}
}}<noinclude>
{{documentation}}
</noinclude>
fd0c4e7050dded2d50e5df405e6e5e31dd0d46ac
Template:No redirect
10
152
351
2022-01-02T09:07:18Z
wikipedia>Dinoguy1000
0
fix "|=foo" bug
wikitext
text/x-wiki
{{safesubst:<noinclude/>#if: {{safesubst:<noinclude/>#invoke:Redirect|isRedirect|{{{1}}}}}
| <span class="plainlinks">[{{safesubst:<noinclude/>fullurl:{{{1}}}|redirect=no}} {{{2|{{{1}}}}}}]</span>
| {{safesubst:<noinclude/>#if:{{{2|}}}|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}|{{{2}}}]]|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}]]}}
}}<noinclude>
{{documentation}}
</noinclude>
1760035b1bed54ee08b810208ed3551b812dfe13
Module:Navbar/styles.css
828
93
202
2022-01-03T23:12:15Z
wikipedia>Izno
0
navbar styles that were moved to parent templates
sanitized-css
text/css
/* {{pp|small=yes}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
9d4056f949b4f0b159e3d40dfb1a5f01e72f9571
Template:Documentation
10
15
29
2022-01-05T08:31:52Z
mw>Taravyvan Adijene
0
/* Rationale */ абнаўленьне зьвестак
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude>
{{documentation|content=
{{Lua|Module:Documentation}}
<translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate>
<translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate>
<translate>
==Usage== <!--T:2-->
===Customizing display=== <!--T:3-->
<!--T:4-->
Overrides exist to customize the output in special cases:
</translate>
* <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate>
<translate>
==Rationale== <!--T:6-->
</translate>
<translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate>
<translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate>
<translate>
==See also== <!--T:9-->
</translate>
* <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate>
* {{tim|Documentation}}
* <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate>
}}
[[Category:Formatting templates{{#translation:}}|Template documentation]]
[[Category:Template documentation{{#translation:}}| ]]
</noinclude><includeonly>{{#if:{{{content|}}}|
[[Category:Template documentation pages{{#translation:}}]]
}}</includeonly>
e9a25c87d40f5882dd425c83ed4d3be628082f3c
238
29
2022-03-29T02:14:34Z
wikipedia>Bsherr
0
consistent with new substitution template format
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>
<!-- Add categories to the /doc subpage -->
</noinclude>
9e62b964e96c4e3d478edecbfcb3c0338ae8a276
Template:Documentation/en
10
16
31
2022-01-05T21:45:00Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude>
{{documentation|content=
{{Lua|Module:Documentation}}
This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.
It is intended for pages which are [[Special:MyLanguage/Help:Transclusion|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.
==Usage==
===Customizing display===
Overrides exist to customize the output in special cases:
* <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - change the text of the "documentation" heading. If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.
==Rationale==
This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.
It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[:en:Special:Diff/69888944|developer's explanation]]).
==See also==
* [[w:Template:Documentation subpage]]
* {{tim|Documentation}}
* [[w:Wikipedia:Template documentation]]
}}
[[Category:Formatting templates{{#translation:}}|Template documentation]]
[[Category:Template documentation{{#translation:}}| ]]
</noinclude><includeonly>{{#if:{{{content|}}}|
[[Category:Template documentation pages{{#translation:}}]]
}}</includeonly>
ea09a0702078c03b055fa66d2628126da3e3c062
Module:Documentation/config
828
26
242
2022-01-25T23:46:11Z
wikipedia>Ianblair23
0
link
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[File:Sandbox.svg|50px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:Template test cases|template sandbox]] page'
cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:Template test cases|module sandbox]] page'
cfg['sandbox-notice-pagetype-other'] = 'sandbox page'
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = 'This is the $1 for $2.'
cfg['sandbox-notice-diff-blurb'] = 'This is the $1 for $2 ($3).'
cfg['sandbox-notice-compare-link-display'] = 'diff'
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = 'See also the companion subpage for $1.'
cfg['sandbox-notice-testcases-link-display'] = 'test cases'
cfg['sandbox-notice-testcases-run-blurb'] = 'See also the companion subpage for $1 ($2).'
cfg['sandbox-notice-testcases-run-link-display'] = 'run'
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = 'Template documentation'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = 'Module documentation'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'Summary'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = 'Documentation'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = 'view'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = 'edit'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = 'history'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = 'purge'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = 'The above [[Wikipedia:Template documentation|documentation]] is [[Help:Transclusion|transcluded]] from $1.'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "Editors can experiment in this template's $1 and $2 pages."
cfg['experiment-blurb-module'] = "Editors can experiment in this module's $1 and $2 pages."
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = 'sandbox'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = 'edit'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = 'create'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = 'diff'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = 'mirror'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = 'testcases'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = 'edit'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = 'run'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = 'Add categories to the $1 subpage.'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1.'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = 'Subpages of this $1'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = 'template'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = 'module'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = 'page'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['templatestyles']
-- The name of the TemplateStyles page where CSS is kept.
-- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed.
cfg['templatestyles'] = 'Module:Documentation/styles.css'
-- cfg['container']
-- Class which can be used to set flex or grid CSS on the
-- two child divs documentation and documentation-metadata
cfg['container'] = 'documentation-container'
-- cfg['main-div-classes']
-- Classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'documentation'
-- cfg['main-div-heading-class']
-- Class for the main heading for templates and modules and assoc. talk spaces
cfg['main-div-heading-class'] = 'documentation-heading'
-- cfg['start-box-class']
-- Class for the start box
cfg['start-box-class'] = 'documentation-startbox'
-- cfg['start-box-link-classes']
-- Classes used for the [view][edit][history] or [create] links in the start box.
-- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]]
cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks'
-- cfg['end-box-class']
-- Class for the end box.
cfg['end-box-class'] = 'documentation-metadata'
-- cfg['end-box-plainlinks']
-- Plainlinks
cfg['end-box-plainlinks'] = 'plainlinks'
-- cfg['toolbar-class']
-- Class added for toolbar links.
cfg['toolbar-class'] = 'documentation-toolbar'
-- cfg['clear']
-- Just used to clear things.
cfg['clear'] = 'documentation-clear'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
71b68ed73088f1a59d61acf06bbee9fde6677f03
Template:Languages
10
420
1279
2022-01-30T17:31:41Z
mw>Kaganer
0
PAGELANGUAGE
wikitext
text/x-wiki
{{#ifeq:<languages exists/>|<languages/>|<languages/>|
{{nmbox
| header = {{ll|Project:Language policy|{{Languages/Title|{{SUBPAGENAME}}}}}}
| text =
'''[[{{{1|:{{translatable}}}}}|English]]''' {{Languages/Lang|af|{{{1|}}}|
}}{{Languages/Lang|ar|{{{1|}}}|
}}{{Languages/Lang|ast|{{{1|}}}|
}}{{Languages/Lang|az|{{{1|}}}|
}}{{Languages/Lang|bcc|{{{1|}}}|
}}{{Languages/Lang|be|{{{1|}}}|
}}{{Languages/Lang|be-tarask|{{{1|}}}|
}}{{Languages/Lang|bg|{{{1|}}}|
}}{{Languages/Lang|br|{{{1|}}}|
}}{{Languages/Lang|bn|{{{1|}}}|
}}{{Languages/Lang|bs|{{{1|}}}|
}}{{Languages/Lang|ca|{{{1|}}}|
}}{{Languages/Lang|ckb|{{{1|}}}|
}}{{Languages/Lang|cs|{{{1|}}}|
}}{{Languages/Lang|da|{{{1|}}}|
}}{{Languages/Lang|de|{{{1|}}}|
}}{{Languages/Lang|diq|{{{1|}}}|
}}{{Languages/Lang|el|{{{1|}}}|
}}{{Languages/Lang|eo|{{{1|}}}|
}}{{Languages/Lang|es|{{{1|}}}|
}}{{Languages/Lang|fa|{{{1|}}}|
}}{{Languages/Lang|fi|{{{1|}}}|
}}{{Languages/Lang|fr|{{{1|}}}|
}}{{Languages/Lang|gl|{{{1|}}}|
}}{{Languages/Lang|gu|{{{1|}}}|
}}{{Languages/Lang|he|{{{1|}}}|
}}{{Languages/Lang|hi|{{{1|}}}|
}}{{Languages/Lang|hr|{{{1|}}}|
}}{{Languages/Lang|hu|{{{1|}}}|
}}{{Languages/Lang|hy|{{{1|}}}|
}}{{Languages/Lang|id|{{{1|}}}|
}}{{Languages/Lang|io|{{{1|}}}|
}}{{Languages/Lang|it|{{{1|}}}|
}}{{Languages/Lang|ja|{{{1|}}}|
}}{{Languages/Lang|jv|{{{1|}}}|
}}{{Languages/Lang|ka|{{{1|}}}|
}}{{Languages/Lang|kk|{{{1|}}}|
}}<span class="autonym">{{Languages/Lang|km|{{{1|}}}|
}}</span>{{Languages/Lang|ko|{{{1|}}}|
}}{{Languages/Lang|ko-kp|{{{1|}}}|
}}{{Languages/Lang|ksh|{{{1|}}}|
}}{{Languages/Lang|kw|{{{1|}}}|
}}{{Languages/Lang|la|{{{1|}}}|
}}{{Languages/Lang|map-bms|{{{1|}}}|
}}{{Languages/Lang|min|{{{1|}}}|
}}{{Languages/Lang|mk|{{{1|}}}|
}}{{Languages/Lang|ml|{{{1|}}}|
}}<span class="autonym">{{Languages/Lang|mr|{{{1|}}}|
}}</span>{{Languages/Lang|ms|{{{1|}}}|
}}{{Languages/Lang|mwl|{{{1|}}}|
}}{{Languages/Lang|nl|{{{1|}}}|
}}{{Languages/Lang|no|{{{1|}}}|
}}{{Languages/Lang|oc|{{{1|}}}|
}}{{Languages/Lang|or|{{{1|}}}|
}}{{Languages/Lang|pl|{{{1|}}}|
}}{{Languages/Lang|pt|{{{1|}}}|
}}{{Languages/Lang|pt-br|{{{1|}}}|
}}{{Languages/Lang|ro|{{{1|}}}|
}}{{Languages/Lang|ru|{{{1|}}}|
}}{{Languages/Lang|sc|{{{1|}}}|
}}{{Languages/Lang|si|{{{1|}}}|
}}{{Languages/Lang|sk|{{{1|}}}|
}}{{Languages/Lang|sl|{{{1|}}}|
}}{{Languages/Lang|so|{{{1|}}}|
}}{{Languages/Lang|sq|{{{1|}}}|
}}{{Languages/Lang|sr|{{{1|}}}|
}}{{Languages/Lang|sv|{{{1|}}}|
}}{{Languages/Lang|ta|{{{1|}}}|
}}{{Languages/Lang|th|{{{1|}}}|
}}{{Languages/Lang|tr|{{{1|}}}|
}}{{Languages/Lang|uk|{{{1|}}}|
}}{{Languages/Lang|vi|{{{1|}}}|
}}{{Languages/Lang|yi|{{{1|}}}|
}}{{Languages/Lang|yue|{{{1|}}}|
}}{{Languages/Lang|zh|{{{1|}}}|
}}{{Languages/Lang|zh-hans|{{{1|}}}|
}}{{Languages/Lang|zh-hant|{{{1|}}}|
}}{{Languages/Lang|zh-tw|{{{1|}}}}}|
}}<!--/nmbox--><includeonly>{{#if:{{Languages/Lang|af|{{{1|}}}|
}}{{Languages/Lang|ar|{{{1|}}}|
}}{{Languages/Lang|ast|{{{1|}}}|
}}{{Languages/Lang|az|{{{1|}}}|
}}{{Languages/Lang|bcc|{{{1|}}}|
}}{{Languages/Lang|be|{{{1|}}}|
}}{{Languages/Lang|be-tarask|{{{1|}}}|
}}{{Languages/Lang|bg|{{{1|}}}|
}}{{Languages/Lang|br|{{{1|}}}|
}}{{Languages/Lang|bn|{{{1|}}}|
}}{{Languages/Lang|bs|{{{1|}}}|
}}{{Languages/Lang|ca|{{{1|}}}|
}}{{Languages/Lang|ckb|{{{1|}}}|
}}{{Languages/Lang|cs|{{{1|}}}|
}}{{Languages/Lang|da|{{{1|}}}|
}}{{Languages/Lang|de|{{{1|}}}|
}}{{Languages/Lang|diq|{{{1|}}}|
}}{{Languages/Lang|el|{{{1|}}}|
}}{{Languages/Lang|eo|{{{1|}}}|
}}{{Languages/Lang|es|{{{1|}}}|
}}{{Languages/Lang|fa|{{{1|}}}|
}}{{Languages/Lang|fi|{{{1|}}}|
}}{{Languages/Lang|fr|{{{1|}}}|
}}{{Languages/Lang|gl|{{{1|}}}|
}}{{Languages/Lang|gu|{{{1|}}}|
}}{{Languages/Lang|he|{{{1|}}}|
}}{{Languages/Lang|hi|{{{1|}}}|
}}{{Languages/Lang|hr|{{{1|}}}|
}}{{Languages/Lang|hu|{{{1|}}}|
}}{{Languages/Lang|hy|{{{1|}}}|
}}{{Languages/Lang|id|{{{1|}}}|
}}{{Languages/Lang|io|{{{1|}}}|
}}{{Languages/Lang|it|{{{1|}}}|
}}{{Languages/Lang|ja|{{{1|}}}|
}}{{Languages/Lang|jv|{{{1|}}}|
}}{{Languages/Lang|ka|{{{1|}}}|
}}{{Languages/Lang|kk|{{{1|}}}|
}}{{Languages/Lang|km|{{{1|}}}|
}}{{Languages/Lang|ko|{{{1|}}}|
}}{{Languages/Lang|ko-kp|{{{1|}}}|
}}{{Languages/Lang|ksh|{{{1|}}}|
}}{{Languages/Lang|kw|{{{1|}}}|
}}{{Languages/Lang|la|{{{1|}}}|
}}{{Languages/Lang|map-bms|{{{1|}}}|
}}{{Languages/Lang|min|{{{1|}}}|
}}{{Languages/Lang|mk|{{{1|}}}|
}}{{Languages/Lang|ml|{{{1|}}}|
}}{{Languages/Lang|mr|{{{1|}}}|
}}{{Languages/Lang|ms|{{{1|}}}|
}}{{Languages/Lang|mwl|{{{1|}}}|
}}{{Languages/Lang|nl|{{{1|}}}|
}}{{Languages/Lang|no|{{{1|}}}|
}}{{Languages/Lang|oc|{{{1|}}}|
}}{{Languages/Lang|or|{{{1|}}}|
}}{{Languages/Lang|pl|{{{1|}}}|
}}{{Languages/Lang|pt|{{{1|}}}|
}}{{Languages/Lang|pt-br|{{{1|}}}|
}}{{Languages/Lang|ro|{{{1|}}}|
}}{{Languages/Lang|ru|{{{1|}}}|
}}{{Languages/Lang|si|{{{1|}}}|
}}{{Languages/Lang|sk|{{{1|}}}|
}}{{Languages/Lang|sl|{{{1|}}}|
}}{{Languages/Lang|so|{{{1|}}}|
}}{{Languages/Lang|sq|{{{1|}}}|
}}{{Languages/Lang|sr|{{{1|}}}|
}}{{Languages/Lang|sv|{{{1|}}}|
}}{{Languages/Lang|ta|{{{1|}}}|
}}{{Languages/Lang|th|{{{1|}}}|
}}{{Languages/Lang|tr|{{{1|}}}|
}}{{Languages/Lang|uk|{{{1|}}}|
}}{{Languages/Lang|vi|{{{1|}}}|
}}{{Languages/Lang|yi|{{{1|}}}|
}}{{Languages/Lang|yue|{{{1|}}}|
}}{{Languages/Lang|zh|{{{1|}}}|
}}{{Languages/Lang|zh-hans|{{{1|}}}|
}}{{Languages/Lang|zh-hant|{{{1|}}}|
}}{{Languages/Lang|zh-tw|{{{1|}}}}}
||[[Category:Languages pages without translations]]}}<!--/#if--><!--
-->[[Category:Languages pages]]<!--
-->{{#switch:{{PAGELANGUAGE}}
|en=<!--empty-->
|ku-latn=[[Category:Languages pages/ku]]
|zh-hans|zh-hant=[[Category:Languages pages/zh]]
|#default=[[Category:Languages pages{{#translation:}}]]
}}<!--/#switch--></includeonly>}}<!--/#ifeq--><noinclude>
{{documentation}}
</noinclude>
55bb0db791ef7b2ac02d610038d723c74f71cd00
Template:TemplateData header/en
10
22
43
2022-01-30T17:48:30Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages/>
<onlyinclude>{{#switch:
|=
<div class="templatedata-header"><!--
-->{{#if:{{yesno|{{{editlinks|}}}}}<!--
-->|{{#ifexpr:<!--
-->{{#if:{{{docpage|}}}<!--
-->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!--
-->|not{{IsDocSubpage|false=0}}<!--
-->}}<!--
-->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!--
-->}}<!--
-->}}
{{#if:{{{noheader|}}}||This is the [[Special:MyLanguage/Help:TemplateData|TemplateData]] documentation for this template used by [[Special:MyLanguage/VisualEditor|VisualEditor]] and other tools.}}
'''{{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!--
-->|{{#if:{{IsDocSubpage|false=}}<!--
-->|[[Category:TemplateData documentation{{#translation:}}]]<!--
-->|[[Category:Templates using TemplateData{{#translation:}}]]<!--
-->}}<!--
-->}}</includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}}
}}</onlyinclude>
{{Documentation|content=
Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]].
== Usage ==
{{#tag:syntaxhighlight|
==TemplateData== or ==Parameters== or ==Usage==
{{((}}TemplateData header{{))}}
{{^(}}templatedata{{)^}}{
...
}{{^(}}/templatedata{{)^}}
|lang=html
}}
Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]].
<dl><dd>
{{TemplateData header|Template name}}
</dd></dl>
Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text.
<dl><dd>
{{TemplateData header|noheader=1}}
</dd></dl>
==Parameters==
{{TemplateData header/doc}}
}}
</noinclude>
dce30fc2e3f9848db82a3e0290f65f2d61e1c5ed
Template:Nmbox
10
417
1269
2022-01-30T18:30:39Z
mw>Kaganer
0
PAGELANGUAGE
wikitext
text/x-wiki
<templatestyles src="Template:Nmbox/styles.css" />
<div class="nmbox noprint {{dir|{{PAGELANGUAGE}}|mw-content-rtl|mw-content-ltr}}">{{#if: {{{image|}}}{{{header|}}}
|<div class="nmbox-header">{{#if: {{{image|}}}|<div class="nmbox-image mbox-image">{{{image|}}}</div>}}{{{header|}}}
</div>}}
{{#if:{{{text|}}}|<div class="nmbox-text mbox-text">{{{text|}}}</div>}}
</div><noinclude>
{{documentation}}
</noinclude>
65d650d49fef1164b81d6520492d31f2e477c2bf
Module:Int
828
408
1251
2022-01-30T22:06:47Z
mw>AntiCompositeNumber
0
check message in the target language, not the default, still return missing message markup if message does not exist (and is not just disabled)
Scribunto
text/plain
-- This is a helper module for [[Template:int]]
local templateTranslation = require('Module:Template translation')
local this = {}
function this.renderIntMessage(frame)
local args = frame.args
local pargs = (frame:getParent() or {}).args
local arguments = {}
for k, v in pairs(pargs) do
local n = tonumber(k) or 0
if (n >= 2) then
arguments[n - 1] = mw.text.trim(v)
end
end
local lang
if args.lang and args.lang ~= '' and mw.language.isValidCode(args.lang) then
lang = args.lang
else
lang = templateTranslation.getLanguage()
end
local msg = mw.message.new(mw.text.trim(args[1]), arguments):inLanguage(lang)
if msg:exists() or lang == 'qqx' then
if msg:isDisabled() then
return args.missing or ''
else
local msgstr = msg:plain()
return frame:preprocess(msgstr)
end
else
return args.missing ~= ''
and args.missing
or '⧼' .. args[1] .. '⧽'
end
end
return this
8bd789d31d4f269e575c5806864031420e6a5c86
Module:TableTools
828
31
166
61
2022-01-31T13:08:18Z
wikipedia>MSGJ
0
updates/fixes requested by [[User:Uzume]]
Scribunto
text/plain
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should not --
-- be called directly from #invoke. --
------------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
function p.isPositiveInteger(v)
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity
end
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false if
-- not. Although it doesn't operate on tables, it is included here as it is useful
-- for determining whether a value can be a valid table key. Lua will generate an
-- error if a NaN is used as a table key.
------------------------------------------------------------------------------------
function p.isNan(v)
return type(v) == 'number' and v ~= v
end
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
function p.shallowClone(t)
checkType('shallowClone', 1, t, 'table')
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
function p.removeDuplicates(arr)
checkType('removeDuplicates', 1, arr, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for _, v in ipairs(arr) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return
-- {1, 3, 6}.
------------------------------------------------------------------------------------
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table
-- of subtables in the format
-- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}.
-- Keys that don't end with an integer are stored in a subtable named "other". The
-- compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for _ in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then
return tostring(item1) < tostring(item2)
else
return item1 < item2
end
end
------------------------------------------------------------------------------------
-- keysToList
--
-- Returns an array of the keys in a table, sorted using either a default
-- comparison function or a custom keySort function.
------------------------------------------------------------------------------------
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'})
end
local arr = {}
local index = 1
for k in pairs(t) do
arr[index] = k
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(arr, keySort)
end
return arr
end
------------------------------------------------------------------------------------
-- sortedPairs
--
-- Iterates through a table, with the keys sorted using the keysToList function.
-- If there are only numerical keys, sparseIpairs is probably more efficient.
------------------------------------------------------------------------------------
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local arr = p.keysToList(t, keySort, true)
local i = 0
return function ()
i = i + 1
local key = arr[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- isArray
--
-- Returns true if the given value is a table and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArray(v)
if type(v) ~= 'table' then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- isArrayLike
--
-- Returns true if the given value is iterable and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArrayLike(v)
if not pcall(pairs, v) then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- invert
--
-- Transposes the keys and values in an array. For example, {"a", "b", "c"} ->
-- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to
-- the index of the last duplicate) and NaN values are ignored.
------------------------------------------------------------------------------------
function p.invert(arr)
checkType("invert", 1, arr, "table")
local isNan = p.isNan
local map = {}
for i, v in ipairs(arr) do
if not isNan(v) then
map[v] = i
end
end
return map
end
------------------------------------------------------------------------------------
-- listToSet
--
-- Creates a set from the array part of the table. Indexing the set by any of the
-- values of the array returns true. For example, {"a", "b", "c"} ->
-- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them
-- never equal to any value (including other NaNs or even themselves).
------------------------------------------------------------------------------------
function p.listToSet(arr)
checkType("listToSet", 1, arr, "table")
local isNan = p.isNan
local set = {}
for _, v in ipairs(arr) do
if not isNan(v) then
set[v] = true
end
end
return set
end
------------------------------------------------------------------------------------
-- deepCopy
--
-- Recursive deep copy function. Preserves identities of subtables.
------------------------------------------------------------------------------------
local function _deepCopy(orig, includeMetatable, already_seen)
-- Stores copies of tables indexed by the original table.
already_seen = already_seen or {}
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
if type(orig) == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen)
end
already_seen[orig] = copy
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
local mt_copy = _deepCopy(mt, includeMetatable, already_seen)
setmetatable(copy, mt_copy)
already_seen[mt] = mt_copy
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen)
end
------------------------------------------------------------------------------------
-- sparseConcat
--
-- Concatenates all values in the table that are indexed by a number, in order.
-- sparseConcat{a, nil, c, d} => "acd"
-- sparseConcat{nil, b, c, d} => "bcd"
------------------------------------------------------------------------------------
function p.sparseConcat(t, sep, i, j)
local arr = {}
local arr_i = 0
for _, v in p.sparseIpairs(t) do
arr_i = arr_i + 1
arr[arr_i] = v
end
return table.concat(arr, sep, i, j)
end
------------------------------------------------------------------------------------
-- length
--
-- Finds the length of an array, or of a quasi-array with keys such as "data1",
-- "data2", etc., using an exponential search algorithm. It is similar to the
-- operator #, but may return a different value when there are gaps in the array
-- portion of the table. Intended to be used on data loaded with mw.loadData. For
-- other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of the number
-- of unnamed template parameters, so use this function for frame.args.
------------------------------------------------------------------------------------
function p.length(t, prefix)
-- requiring module inline so that [[Module:Exponential search]] which is
-- only needed by this one function doesn't get millions of transclusions
local expSearch = require("Module:Exponential search")
checkType('length', 1, t, 'table')
checkType('length', 2, prefix, 'string', true)
return expSearch(function (i)
local key
if prefix then
key = prefix .. tostring(i)
else
key = i
end
return t[key] ~= nil
end) or 0
end
------------------------------------------------------------------------------------
-- inArray
--
-- Returns true if valueToFind is a member of the array, and false otherwise.
------------------------------------------------------------------------------------
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
-- if valueToFind is nil, error?
for _, v in ipairs(arr) do
if v == valueToFind then
return true
end
end
return false
end
return p
085e7094ac84eb0132ee65822cf3f69cd8ba3d81
Template:Pp-template
10
166
383
2022-02-09T03:21:43Z
mw>Clump
0
Reverted edits by [[Special:Contribs/112.204.172.159|112.204.172.159]] ([[User talk:112.204.172.159|talk]]) to last version by Eyesnore
wikitext
text/x-wiki
<includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}}
|*=[[Category:Pages with incorrect protection templates]]
|autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]]
|sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]]
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1046e139e5a0380698fd75d7207e9ef53a4ff91d
Template:Navbar
10
109
1321
234
2022-02-12T23:57:50Z
mw>Shirayuki
0
new tvar syntax
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><templatestyles src="Module:Navbar/styles.css"/><span class="noprint plainlinks navbar" style="{{{style|}}}"><small><!--
-->{{#if:{{{mini|}}}{{{plain|}}}|<!--nothing-->|<!--else:
--><span style="{{{fontstyle|}}}">{{#if:{{{text|}}}|{{{text}}}|<translate><!--T:1--> This box:</translate>}} </span>}}<!--
-->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">[</span>}}<!--
--><span style="white-space:nowrap;word-spacing:-.12em;"><!--
-->[[{{transclude|{{{1}}}}}|<span style="{{{fontstyle|}}}" title="<translate nowrap><!--T:2--> View this template</translate>"><!--
-->{{#if:{{{mini|}}}|<translate><!--T:3--> v</translate>|<translate><!--T:4--> view</translate>}}</span>]]<!--
--><span style="{{{fontstyle|}}}"> <b>·</b> </span><!--
-->[{{fullurl:{{<noinclude><nowiki/></noinclude>TALKPAGENAME:{{transclude|{{{1}}}}}}}}} <span style="{{{fontstyle|}}}" title="<translate nowrap><!--T:9--> Discuss this template</translate>"><!--
-->{{#if:{{{mini|}}}|<translate><!--T:5--> d</translate>|<translate><!--T:6--> talk</translate>}}</span>]<!--
-->{{#if:{{{noedit|}}}|<!--nothing-->|<!--else:
--><span style="{{{fontstyle|}}}"> <b>·</b> </span><!--
-->[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} <span style="{{{fontstyle|}}}" title="<translate nowrap><!--T:10--> Edit this template</translate>"><!--
-->{{#if:{{{mini|}}}|<translate><!--T:7--> e</translate>|<translate><!--T:8--> edit</translate>}}</span>]}}<!--
--></span><!--
-->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">]</span>}}<!--
--></small></span><noinclude>
{{Documentation|content=
{{Uses TemplateStyles|Module:Navbar/styles.css}}
<translate>
== Usage == <!--T:11-->
=== General === <!--T:12-->
<!--T:13-->
When one of the following examples is placed inside a given [[<tvar name=1>Special:MyLanguage/Help:Templates</tvar>|template]], it adds navbar navigational functionality:
</translate>
: {{tlx|Navbar|Navbar|mini{{=}}1}}
: {{tlx|Navbar|Navbar|plain{{=}}1}}
: {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}}
<translate><!--T:14--> The <tvar name=1><code><nowiki>{{subst:PAGENAME}}</nowiki></code></tvar> will be substituted with the template's name when parsed by the servers.</translate>
<translate><!--T:15--> For example, <tvar name=1>{{tlx|Navbar|navbar/doc}}</tvar> gives:</translate>
{{Navbar|navbar/doc}}
<translate>
=== Font-size === <!--T:16-->
</translate>
<translate><!--T:17--> Font-size is <tvar name=1><code>88%</code></tvar> when used in a navbar, and <tvar name=2><code>100%</code></tvar> when nested in a navbox.</translate>
<translate><!--T:18--> In the navbar, the weight is "<tvar name=1><code>normal</code></tvar>"; when nested in navbox, it takes on the outer setting.</translate>
<translate><!--T:19--> The middot is bold.</translate>
<translate>
== Examples == <!--T:20-->
=== Required parameters === <!--T:21-->
</translate>
* {{tlx|Navbar|''<translate><!--T:22--> template name</translate>''}} — <translate><!--T:23--> the template name is required.</translate>
<translate>
=== Optional parameters === <!--T:24-->
</translate>
{{(}}{{!}} class="wikitable"
! <translate><!--T:25--> Options</translate>
! <translate><!--T:26--> Parameters</translate>
! <translate><!--T:27--> Produces...</translate>
{{!}}-
{{!}} <translate><!--T:28--> Basic</translate>
{{!}} {{tlx|Navbar|2=''<translate><!--T:29--> template name</translate>''}}
{{!}} {{navbar|navbar/doc}}
{{!}}-
{{!}} <translate><!--T:30--> Different text</translate>
{{!}} {{tlx|Navbar|2=''<translate><!--T:31--> template name</translate>''|3=text{{=}}<translate><!--T:32--> This template:</translate>}}
{{!}} {{navbar|navbar/doc|text=<translate><!--T:33--> This template:</translate>}}
{{!}}-
{{!}} <translate><!--T:34--> Without "This box:" text</translate>
{{!}} {{tlx|Navbar|2=''<translate><!--T:35--> template name</translate>''|3=plain{{=}}1}}
{{!}} {{navbar|navbar/doc|plain=1}}
{{!}}-
{{!}} <translate><!--T:36--> Short version</translate>
{{!}} {{tlx|Navbar|2=''<translate><!--T:37--> template name</translate>''|3=mini{{=}}1}}
{{!}} {{navbar|navbar/doc|mini=1}}
{{!}}-
{{!}} <translate><!--T:38--> With a color option</translate>
{{!}} {{tlx|Navbar|2=''<translate><!--T:39--> template name</translate>''|3=fontstyle{{=}}color:green}}
{{!}} {{navbar|navbar/doc|fontstyle=color:green}}
{{!}}-
{{!}} <translate><!--T:40--> With brackets</translate>
{{!}} {{tlx|Navbar|2=''<translate><!--T:41--> template name</translate>''|3=brackets{{=}}1}}
{{!}} {{navbar|navbar/doc|brackets=1}}
{{!}}-
{{!}} <translate><!--T:45--> Custom namespace</translate>
{{!}} {{tlx|Navbar|2=''<translate><!--T:46--> namespaced template name</translate>''|3=plain{{=}}1|4=brackets{{=}}1}}
{{!}} {{navbar|User:Example|plain=1|brackets=1}}
{{!}}{{)}}
== TemplateData ==
{{Navbar/doc}}
<translate>
== Notes == <!--T:42-->
</translate>
<translate><!--T:43--> Navbar is contained within a <tvar name=1>{{tag|div}}</tvar> in order to accommodate a horizontal unnumbered list.</translate>
<translate><!--T:44--> This means it cannot be placed inside a <tvar name=1>{{tag|span}}</tvar> or other inline element, because Tidy will 'fix' situations where it finds block elements inside inline elements.</translate>
<!--- PLEASE ADD METADATA TO THE <includeonly> SECTION HERE --->
<includeonly>
[[Category:Formatting templates{{#translation:}}]]
</includeonly>
}}
</noinclude>
5e5af5638e20e93d6f7d25d32f1e0d811b3b601f
Module:Check for unknown parameters
828
76
160
2022-02-21T05:24:13Z
wikipedia>BusterD
0
Changed protection settings for "[[Module:Check for unknown parameters]]": [[WP:High-risk templates|Highly visible template]]; requested at [[WP:RfPP]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
Scribunto
text/plain
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add results to the output tables
local res = {}
if #values > 0 then
local unknown_text = args['unknown'] or 'Found _VALUE_, '
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
local preview_text = args['preview']
if isnotempty(preview_text) then
preview_text = require('Module:If preview')._warning({preview_text})
elseif preview == nil then
preview_text = unknown_text
end
unknown_text = preview_text
end
for _, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p
93db6d115d4328d2a5148bb42959105e367b663e
Template:Tll
10
445
1339
2022-02-23T07:17:07Z
mw>Shirayuki
0
wikitext
text/x-wiki
<onlyinclude><!--
--><templatestyles src="Template:Mono/styles.css"/><!--
-->{{#if:{{yesno|{{{nowrap|}}}}}<!--
-->|<templatestyles src="Template:Nowrap/styles.css"/><!--
-->}}<span class="
monospaced
{{#if:{{yesno|{{{nowrap|}}}}}|nowrap}}
"><!--
-->{{((}}<!--
--><includeonly>[[Special:MyLanguage/Template:{{{{{|safesubst:}}}ucfirst:{{{1}}}}}|{{{1}}}]]</includeonly><!--
--><noinclude>[[Special:MyLanguage/{{translatable}}|Template link localized]]</noinclude><!--
-->{{{{{|safesubst:}}}#ifeq:{{{2|}}}|{{{2}}}|{{!}}{{{2}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{3|}}}|{{{3}}}|{{!}}{{{3}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{4|}}}|{{{4}}}|{{!}}{{{4}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{5|}}}|{{{5}}}|{{!}}{{{5}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{6|}}}|{{{6}}}|{{!}}{{{6}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{7|}}}|{{{7}}}|{{!}}{{{7}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{8|}}}|{{{8}}}|{{!}}{{{8}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{9|}}}|{{{9}}}|{{!}}{{{9}}}}}<!--
-->{{))}}<!--
--></span><!--
--></onlyinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
590499106cdfec1fb3c1797e6cc6fc56946b3e0d
Template:Magic word
10
412
1259
2022-02-23T07:21:33Z
mw>Shirayuki
0
wikitext
text/x-wiki
<onlyinclude><!--
-->{{#ifexpr:<!--
-->{{yesno|{{{code|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!--
-->|<!--
-->{{#if:{{yesno|{{{mono|}}}}}|<templatestyles src="Template:Mono/styles.css"/>}}<!--
-->{{#if:{{yesno|{{{nowrap|}}}}}|<templatestyles src="Template:Nowrap/styles.css"/>}}<!--
--><{{#if:{{yesno|{{{code|}}}}}|code|span}} {{#ifexpr:<!--
-->{{yesno|{{{mono|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!--
-->|<!--
-->class="{{yesno|{{{mono|}}}|yes=monospaced|no=}} {{yesno|{{{nowrap|}}}|yes=nowrap|no=}}"<!--
-->}}><!--
-->}}<!--
-->{{((}}<!--
-->[[mw:Special:MyLanguage/{{#switch:{{{ext|}}}<!--
Extensions with public domain help page documentation:
-->|Translate=Help:Extension:Translate<!--
-->{{#switch:{{{1}}}<!--
-->|#translation=/Page translation administration<!--
-->}}<!--
-->|ParserFunctions=Help:Extension:ParserFunctions<!--
Extensions with documentation in subpages of the “Extension:” namespace:
-->|Page Forms=Extension:Page Forms<!--
-->{{#switch:{{{1}}}<!--
-->|#arraymap<!--
-->|#arraymaptemplate<!--
-->|#template_display<!--
-->|#template_params<!--
-->=/Page Forms and templates<!--
-->|#autoedit<!--
-->|#forminput<!--
-->|#formlink<!--
-->|#formredlink<!--
-->=/Linking to forms<!--
-->|#queryformlink<!--
-->=/Creating query forms<!--
-->|#default_form<!--
-->=/The "edit with form" tab<!--
-->}}<!--
Default page when `ext` is specified:
-->|#default=Extension:{{{ext}}}<!--
Default page when `ext` is not specified:
-->|=Help:Magic words<!--
-->}}<includeonly>#{{#ifeq:{{Str left|{{{1}}}}}|#<!--
Workaround bug which causes the leading `#`s in the fragment
of a “Special:MyLanguage/...” link to be discarded:
-->|.23{{Str right|{{{1}}}|1}}<!--
-->|{{{1}}}<!--
-->}}|{{{1}}}</includeonly><noinclude>|magic word</noinclude>]]<!--
-->{{#ifexpr:<!--
-->{{#ifeq:{{{2|¬}}}|{{{2}}}|1|0}}or{{#ifeq:{{Str left|{{{1}}}}}|#|1|0}}<!--
-->|:{{{2|}}}<!--
-->}}<!--
-->{{))}}<!--
-->{{#ifexpr:<!--
-->{{yesno|{{{code|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!--
-->|</{{#if:{{yesno|{{{code|}}}}}|code|span}}><!--
-->}}<!--
--></onlyinclude>
{{Documentation}}
aa8986c941a5e9ac9ff1dd2876f7455839290bd4
Template:Tlx
10
35
69
2022-02-23T07:26:01Z
mw>Shirayuki
0
wikitext
text/x-wiki
<onlyinclude><!--
--><templatestyles src="Template:Mono/styles.css"/><!--
-->{{#if:{{yesno|{{{nowrap|}}}}}<!--
-->|<templatestyles src="Template:Nowrap/styles.css"/><!--
-->}}<span class="
monospaced
{{#if:{{yesno|{{{nowrap|}}}}}|nowrap}}
"><!--
-->{{((}}<!--
--><noinclude>[[Template:Tlx|tlx]]</noinclude><!--
--><includeonly>[[{{#if:{{{SISTER|}}}|{{{SISTER}}}Template|{{ns:10}}}}:{{{1}}}|{{{1}}}]]</includeonly><!--
-->{{#if:{{{2|}}}|{{!}}{{{2}}}}}<!--
-->{{#if:{{{3|}}}|{{!}}{{{3}}}}}<!--
-->{{#if:{{{4|}}}|{{!}}{{{4}}}}}<!--
-->{{#if:{{{5|}}}|{{!}}{{{5}}}}}<!--
-->{{#if:{{{6|}}}|{{!}}{{{6}}}}}<!--
-->{{#if:{{{7|}}}|{{!}}{{{7}}}}}<!--
-->{{#if:{{{8|}}}|{{!}}''...''}}<!--
-->{{))}}<!--
--></span><!--
--></onlyinclude>
{{documentation}}
25c4c72191d3dad2c3476ae6092c6c17ee3034d8
Template:Tlc
10
419
1275
2022-02-23T07:28:07Z
mw>Shirayuki
0
wikitext
text/x-wiki
<onlyinclude><!--
--><templatestyles src="Template:Nowrap/styles.css"/><!--
--><code class="nowrap"><!--
-->{{((}}<!--
--><includeonly>{{{1}}}</includeonly><!--
--><noinclude>tlc{{!}}...</noinclude><!--
-->{{#ifeq:{{{2|x}}}|{{{2|}}}| {{!}}{{{2}}} | }}<!--
-->{{#ifeq:{{{3|x}}}|{{{3|}}}| {{!}}{{{3}}} | }}<!--
-->{{#ifeq:{{{4|x}}}|{{{4|}}}| {{!}}{{{4}}} | }}<!--
-->{{#ifeq:{{{5|x}}}|{{{5|}}}| {{!}}{{{5}}} | }}<!--
-->{{#ifeq:{{{6|x}}}|{{{6|}}}| {{!}}{{{6}}} | }}<!--
-->{{#ifeq:{{{7|x}}}|{{{7|}}}| {{!}}{{{7}}} | }}<!--
-->{{#ifeq:{{{8|x}}}|{{{8|}}}| {{!}}{{{8}}} | }}<!--
-->{{#ifeq:{{{9|x}}}|{{{9|}}}| {{!}}{{{9}}} | }}<!--
-->{{))}}<!--
--></code><!--
--></onlyinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
587b3ef23459fe76a16b04d3770178ad99c11882
Module:Effective protection expiry
828
83
182
2022-02-23T10:59:29Z
wikipedia>Xaosflux
0
Changed protection settings for "[[Module:Effective protection expiry]]": used in the mediawiki interface / match [[Module:Effective protection level]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
Scribunto
text/plain
local p = {}
-- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)
return stabilitySettings and stabilitySettings.expiry or 'unknown'
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
end
local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
if rawExpiry == 'infinity' then
return 'infinity'
elseif rawExpiry == '' then
return 'unknown'
else
local year, month, day, hour, minute, second = rawExpiry:match(
'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'
)
if year then
return string.format(
'%s-%s-%sT%s:%s:%s',
year, month, day, hour, minute, second
)
else
error('internal error in Module:Effective protection expiry; malformed expiry timestamp')
end
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
9a8c58dc2667232ed08a9b206a5d89ca8150312b
Template:Tl
10
67
1329
136
2022-02-26T04:13:26Z
mw>Shirayuki
0
wikitext
text/x-wiki
{{((}}[[Template:{{{1}}}|{{{1}}}]]{{))}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
1447a15b7ca7f93848d1ac4b792d61a1d8555e3b
Template:Ns has subpages
10
73
152
2022-03-02T10:43:18Z
wikipedia>Trialpears
0
Changed protection settings for "[[Template:Ns has subpages]]": [[WP:High-risk templates|Highly visible template]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
060d2d01af26cb67fd90a7c346a0d2d5e450a040
Module:Template link general
828
79
170
2022-03-08T08:30:51Z
wikipedia>Primefac
0
update from sandbox - fixes to _show_result and adding _expand
Scribunto
text/plain
-- This implements Template:Tlg
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Is a string non-empty?
local function _ne(s)
return s ~= nil and s ~= ""
end
local nw = mw.text.nowiki
local function addTemplate(s)
local i, _ = s:find(':', 1, true)
if i == nil then
return 'Template:' .. s
end
local ns = s:sub(1, i - 1)
if ns == '' or mw.site.namespaces[ns] then
return s
else
return 'Template:' .. s
end
end
local function trimTemplate(s)
local needle = 'template:'
if s:sub(1, needle:len()):lower() == needle then
return s:sub(needle:len() + 1)
else
return s
end
end
local function linkTitle(args)
if _ne(args.nolink) then
return args['1']
end
local titleObj
local titlePart = '[['
if args['1'] then
-- This handles :Page and other NS
titleObj = mw.title.new(args['1'], 'Template')
else
titleObj = mw.title.getCurrentTitle()
end
titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or
addTemplate(args['1']))
local textPart = args.alttext
if not _ne(textPart) then
if titleObj ~= nil then
textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText
else
-- redlink
textPart = args['1']
end
end
if _ne(args.subst) then
-- HACK: the ns thing above is probably broken
textPart = 'subst:' .. textPart
end
if _ne(args.brace) then
textPart = nw('{{') .. textPart .. nw('}}')
elseif _ne(args.braceinside) then
textPart = nw('{') .. textPart .. nw('}')
end
titlePart = titlePart .. '|' .. textPart .. ']]'
if _ne(args.braceinside) then
titlePart = nw('{') .. titlePart .. nw('}')
end
return titlePart
end
function p.main(frame)
local args = getArgs(frame, {
trim = true,
removeBlanks = false
})
return p._main(args)
end
function p._main(args)
local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)
local italic = _ne(args.italic) or _ne(args.italics)
local dontBrace = _ne(args.brace) or _ne(args.braceinside)
local code = _ne(args.code) or _ne(args.tt)
local show_result = _ne(args._show_result)
local expand = _ne(args._expand)
-- Build the link part
local titlePart = linkTitle(args)
if bold then titlePart = "'''" .. titlePart .. "'''" end
if _ne(args.nowrapname) then titlePart = '<span class="nowrap">' .. titlePart .. '</span>' end
-- Build the arguments
local textPart = ""
local textPartBuffer = "|"
local codeArguments = {}
local codeArgumentsString = ""
local i = 2
local j = 1
while args[i] do
local val = args[i]
if val ~= "" then
if _ne(args.nowiki) then
-- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will
-- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up
val = nw(mw.text.unstripNoWiki(val))
end
local k, v = string.match(val, "(.*)=(.*)")
if not k then
codeArguments[j] = val
j = j + 1
else
codeArguments[k] = v
end
codeArgumentsString = codeArgumentsString .. textPartBuffer .. val
if italic then
val = '<span style="font-style:italic;">' .. val .. '</span>'
end
textPart = textPart .. textPartBuffer .. val
end
i = i + 1
end
-- final wrap
local ret = titlePart .. textPart
if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end
if _ne(args.a) then ret = nw('*') .. ' ' .. ret end
if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end
if code then
ret = '<code>' .. ret .. '</code>'
elseif _ne(args.plaincode) then
ret = '<code style="border:none;background:transparent;">' .. ret .. '</code>'
end
if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end
--[[ Wrap as html??
local span = mw.html.create('span')
span:wikitext(ret)
--]]
if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end
if show_result then
local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments}
ret = ret .. " → " .. result
end
if expand then
local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}')
local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query)
mw.log()
ret = ret .. " [" .. tostring(url) .. "]"
end
return ret
end
return p
c7307fa3959d308a2dd7fd2f5009c1ce6db3d122
Template:Lit
10
257
738
2022-04-03T17:59:39Z
wikipedia>MusikBot II
0
Changed protection settings for "[[Template:Lit]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 2502 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite))
wikitext
text/x-wiki
#REDIRECT [[Template:Literal translation]]
38b4e908291ac0a1fa8482ed0f8d5631c6a213e6
Template:Translatable
10
403
1239
2022-05-07T02:53:36Z
mw>Shirayuki
0
simplify
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}|
|{{{1|{{FULLPAGENAME}}}}}
|{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}}
|1
|{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}}
}}
}}<noinclude>
{{Documentation|content=
{{Lua|Module:String}}
<translate>
== Examples == <!--T:1-->
</translate>
* {{tlx|translatable}}
{{translatable}}
* {{tlx|translatable|2=<translate><!--T:2--> Page name</translate>}}
{{translatable|1=<translate><!--T:3--> Page name</translate>}}
* {{tlx|translatable|2=<translate><!--T:4--> Page name</translate>/{{PAGELANGUAGE}} }}
{{translatable|1=<translate><!--T:5--> Page name</translate>/{{PAGELANGUAGE}} }}
}}
[[Category:Internationalization templates{{#translation:}}]]
</noinclude>
76f8f4907f2c12144291f6adc98a40cc2cc4061f
Template:Translatable/en
10
410
1255
2022-05-07T02:55:05Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}|
|{{{1|{{FULLPAGENAME}}}}}
|{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}}
|1
|{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}}
}}
}}<noinclude>
{{Documentation|content=
{{Lua|Module:String}}
== Examples ==
* {{tlx|translatable}}
{{translatable}}
* {{tlx|translatable|2=Page name}}
{{translatable|1=Page name}}
* {{tlx|translatable|2=Page name/{{PAGELANGUAGE}} }}
{{translatable|1=Page name/{{PAGELANGUAGE}} }}
}}
[[Category:Internationalization templates{{#translation:}}]]
</noinclude>
7fee927d686a6bf590db77885cbef8376112670f
Template:Module rating
10
196
554
2022-06-03T15:10:23Z
wikipedia>The Anome
0
Reverted edits by [[Special:Contribs/Dawn PScLim|Dawn PScLim]] ([[User talk:Dawn PScLim|talk]]) to last version by Alexis Jazz
wikitext
text/x-wiki
<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]]
| alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]]
| beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]]
| release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]]
| protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]]
| semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|Module rating is invalid or not specified.}}
}}
}}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude>
{{module rating|release|nocat=true|demospace=module}}
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc
Template:T
10
185
531
2022-06-05T04:09:28Z
wikipedia>Dinoguy1000
0
not that it matters much, but fix comment closing
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Rcat shell|
{{R from template shortcut}}
}}
<!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta -->
bb10dbc83695404528dbc095ea267429142c7f05
Module:Labelled list hatnote
828
90
196
2022-06-08T23:33:35Z
wikipedia>Nihiltres
0
Fixed iteration-and-removal bug
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Labelled list --
-- --
-- This module does the core work of creating a hatnote composed of a list --
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", --
-- for {{see also}} and similar templates. --
--------------------------------------------------------------------------------
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local yesno --initialize lazily
local p = {}
-- Defaults global to this module
local defaults = {
label = 'See also', --Final fallback for label argument
labelForm = '%s: %s',
prefixes = {'label', 'label ', 'l'},
template = 'Module:Labelled list hatnote'
}
-- Localizable message strings
local msg = {
errorSuffix = '#Errors',
noInputWarning = 'no page names specified',
noOutputWarning =
"'''[[%s]] — no output: none of the target pages exist.'''"
}
-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays (args, prefixes)
-- Prefixes specify which parameters, in order, to check for display options
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
prefixes = prefixes or defaults.prefixes
local indices = {}
local sparsePages = {}
for k, v in pairs(args) do
if type(k) == 'number' then
indices[#indices + 1] = k
local display
for i = 1, #prefixes do
display = args[prefixes[i] .. k]
if display then break end
end
sparsePages[k] = display and
string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
end
end
table.sort(indices)
local pages = {}
for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end
return pages
end
--Helper function to get a page target from a processed page string
--e.g. "Page|Label" → "Page" or "Target" → "Target"
local function getTarget(pagename)
local pipe = string.find(pagename, '|')
return string.sub(pagename, 0, pipe and pipe - 1 or nil)
end
-- Produces a labelled pages-list hatnote.
-- The main frame (template definition) takes 1 or 2 arguments, for a singular
-- and (optionally) plural label respectively:
-- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}}
-- The resulting template takes pagename & label parameters normally.
function p.labelledList (frame)
mArguments = require('Module:Arguments')
yesno = require('Module:Yesno')
local labels = {frame.args[1] or defaults.label}
labels[2] = frame.args[2] or labels[1]
labels[3] = frame.args[3] --no defaulting
labels[4] = frame.args[4] --no defaulting
local template = frame:getParent():getTitle()
local args = mArguments.getArgs(frame, {parentOnly = true})
local pages = p.preprocessDisplays(args)
local options = {
category = yesno(args.category),
extraclasses = frame.args.extraclasses,
ifexists = yesno(frame.args.ifexists),
namespace = frame.args.namespace or args.namespace,
selfref = yesno(frame.args.selfref or args.selfref),
template = template
}
return p._labelledList(pages, labels, options)
end
function p._labelledList (pages, labels, options)
if options.ifexists then
for k = #pages, 1, -1 do --iterate backwards to allow smooth removals
local v = pages[k]
local title = mw.title.new(getTarget(v), namespace)
if (v == '') or title == nil or not title.exists then
table.remove(pages, k)
end
end
end
labels = labels or {}
label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
for k, v in pairs(pages) do
if mHatnote.findNamespaceId(v) ~= 0 then
label =
(
#pages == 1 and
(labels[3] or labels[1] or defaults.label) or
(labels[4] or labels[2] or defaults.label)
) or defaults.label
end
end
if #pages == 0 then
if options.ifexists then
mw.addWarning(
string.format(
msg.noOutputWarning, options.template or defaults.template
)
)
return ''
else
return mHatnote.makeWikitextError(
msg.noInputWarning,
(options.template or defaults.template) .. msg.errorSuffix,
options.category
)
end
end
local text = string.format(
options.labelForm or defaults.labelForm,
label,
mHatlist.andList(pages, true)
)
local hnOptions = {
extraclasses = options.extraclasses,
selfref = options.selfref
}
return mHatnote._hatnote(text, hnOptions)
end
return p
b7a8ba27cf6195e6427701b94e8d2acad3c40a21
Template:Clear
10
80
174
2022-06-13T15:31:11Z
wikipedia>Xaosflux
0
Changed protection settings for "[[Template:Clear]]": [[WP:High-risk templates|Highly visible template]]: 3MM+ uses ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};"></div><noinclude>
{{documentation}}
</noinclude>
38bab3e3d7fbd3d6800d46556e60bc6bac494d72
Template:Tim
10
164
377
2022-06-23T08:07:13Z
mw>Mtarch11
0
Reverted edits by [[Special:Contribs/118.148.83.155|118.148.83.155]] ([[User talk:118.148.83.155|talk]]) to last version by Damenleeturks
wikitext
text/x-wiki
[[m:Template:{{{1|{{PAGENAME}}}}}]]<noinclude>
{{documentation|content=
Displays a link to a template on Meta.
* {{xpds|tim|foo}}
[[Category:Shortcut templates|{{PAGENAME}}]]
[[Category:External link templates]]}}</noinclude>
2bed05d802e6f826c40c07ef66c9e0df72d4028d
Module:Message box/configuration
828
14
142
27
2022-07-11T18:19:26Z
wikipedia>Izno
0
add templatestyles, remove a variable or two as a result
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = 'Article message templates with missing parameters',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'},
removalNotice = '<small>[[Help:Maintenance template removal|Learn how and when to remove this template message]]</small>',
templatestyles = 'Module:Message box/ambox.css'
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
imageEmptyCell = true,
templatestyles = 'Module:Message box/cmbox.css'
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css'
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox license.png' -- @todo We need an SVG version of this
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg'
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes',
templatestyles = 'Module:Message box/imbox.css'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true,
templatestyles = 'Module:Message box/ombox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
b6f0151037e6867b577c8cca32ff297e48697a10
Module:Message box/ombox.css
828
33
302
65
2022-07-11T18:40:17Z
wikipedia>Izno
0
and move mbox-small to 720px here as well
sanitized-css
text/css
/* {{pp|small=y}} */
.ombox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.ombox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ombox-delete {
border: 2px solid #b32424; /* Red */
}
.ombox-content {
border: 1px solid #f28500; /* Orange */
}
.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
.ombox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.ombox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.ombox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ombox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ombox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.ombox {
margin: 4px 10%;
}
.ombox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
8fe3df4bb607e699eab2dbd23bd4a1a446391002
Template:IsDocSubpage
10
20
39
2022-07-13T12:02:25Z
mw>Tacsipacsi
0
use {{#translation:}}—it handles manual translations as well
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#ifexpr: (
{{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{override|doc}}}}}|1|0}} or (
{{#ifeq:{{lc:{{#titleparts:{{FULLPAGENAME}}|-1|-2}}}}|{{lc:{{{override|doc}}}}}|1|0}}
and {{#if:{{#translation:}}|1|0}}
)
)<!--
-->|{{{true|1}}}<!--
-->|{{{false|}}}<!--
-->}}</includeonly></onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
47b5d5a2fb89240a721f8874924170f791de93b2
Template:Para
10
108
232
2022-07-22T08:06:17Z
wikipedia>TheDJ
0
breakup super long words, so we do not overflow the viewport.
wikitext
text/x-wiki
<code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">|{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}=}}{{{2|}}}</code><noinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
</noinclude>
06006deea2ed5d552aab61b4332321ab749ae7e8
Template:Collapse bottom
10
151
349
2022-08-21T18:03:39Z
wikipedia>MSGJ
0
Undid revision 1105766128 by [[Special:Contributions/MSGJ|MSGJ]] ([[User talk:MSGJ|talk]]) - did not work
wikitext
text/x-wiki
<includeonly>|}</div></includeonly><noinclude>
{{Documentation|Template:Collapse top/doc}}
<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS -->
</noinclude>
64b210e8ab0882b262da50e9fbccf2132bc34fab
Module:Hatnote
828
87
190
2022-09-05T18:18:32Z
wikipedia>Nihiltres
0
Reordered helper functions (first by export status, then alphabetically) and migrated p.quote upstream from [[Module:Redirect hatnote]] (includes contributions by Tamzin and Nihiltres)
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote --
-- --
-- This module produces hatnote links and links to related articles. It --
-- implements the {{hatnote}} and {{format link}} meta-templates and includes --
-- helper functions for other Lua hatnote modules. --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local yesno -- lazily initialise [[Module:Yesno]]
local formatLink -- lazily initialise [[Module:Format link]] ._formatLink
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
function p.defaultClasses(inline)
-- Provides the default hatnote classes as a space-separated string; useful
-- for hatnote-manipulation modules like [[Module:Hatnote group]].
return
(inline == 1 and 'hatnote-inline' or 'hatnote') .. ' ' ..
'navigation-not-searchable'
end
function p.disambiguate(page, disambiguator)
-- Formats a page title with a disambiguation parenthetical,
-- i.e. "Example" → "Example (disambiguation)".
checkType('disambiguate', 1, page, 'string')
checkType('disambiguate', 2, disambiguator, 'string', true)
disambiguator = disambiguator or 'disambiguation'
return mw.ustring.format('%s (%s)', page, disambiguator)
end
function p.findNamespaceId(link, removeColon)
-- Finds the namespace id (namespace number) of a link or a pagename. This
-- function will not work if the link is enclosed in double brackets. Colons
-- are trimmed from the start of the link by default. To skip colon
-- trimming, set the removeColon parameter to false.
checkType('findNamespaceId', 1, link, 'string')
checkType('findNamespaceId', 2, removeColon, 'boolean', true)
if removeColon ~= false then
link = removeInitialColon(link)
end
local namespace = link:match('^(.-):')
if namespace then
local nsTable = mw.site.namespaces[namespace]
if nsTable then
return nsTable.id
end
end
return 0
end
function p.makeWikitextError(msg, helpLink, addTrackingCategory, title)
-- Formats an error message to be returned to wikitext. If
-- addTrackingCategory is not false after being returned from
-- [[Module:Yesno]], and if we are not on a talk page, a tracking category
-- is added.
checkType('makeWikitextError', 1, msg, 'string')
checkType('makeWikitextError', 2, helpLink, 'string', true)
yesno = require('Module:Yesno')
title = title or mw.title.getCurrentTitle()
-- Make the help link text.
local helpText
if helpLink then
helpText = ' ([[' .. helpLink .. '|help]])'
else
helpText = ''
end
-- Make the category text.
local category
if not title.isTalkPage -- Don't categorise talk pages
and title.namespace ~= 2 -- Don't categorise userspace
and yesno(addTrackingCategory) ~= false -- Allow opting out
then
category = 'Hatnote templates with errors'
category = mw.ustring.format(
'[[%s:%s]]',
mw.site.namespaces[14].name,
category
)
else
category = ''
end
return mw.ustring.format(
'<strong class="error">Error: %s%s.</strong>%s',
msg,
helpText,
category
)
end
local curNs = mw.title.getCurrentTitle().namespace
p.missingTargetCat =
--Default missing target category, exported for use in related modules
((curNs == 0) or (curNs == 14)) and
'Articles with hatnote templates targeting a nonexistent page' or nil
function p.quote(title)
--Wraps titles in quotation marks. If the title starts/ends with a quotation
--mark, kerns that side as with {{-'}}
local quotationMarks = {
["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true
}
local quoteLeft, quoteRight = -- Test if start/end are quotation marks
quotationMarks[string.sub(title, 1, 1)],
quotationMarks[string.sub(title, -1, -1)]
if quoteLeft or quoteRight then
title = mw.html.create("span"):wikitext(title)
end
if quoteLeft then title:css("padding-left", "0.15em") end
if quoteRight then title:css("padding-right", "0.15em") end
return '"' .. tostring(title) .. '"'
end
--------------------------------------------------------------------------------
-- Hatnote
--
-- Produces standard hatnote text. Implements the {{hatnote}} template.
--------------------------------------------------------------------------------
function p.hatnote(frame)
local args = getArgs(frame)
local s = args[1]
if not s then
return p.makeWikitextError(
'no text specified',
'Template:Hatnote#Errors',
args.category
)
end
return p._hatnote(s, {
extraclasses = args.extraclasses,
selfref = args.selfref
})
end
function p._hatnote(s, options)
checkType('_hatnote', 1, s, 'string')
checkType('_hatnote', 2, options, 'table', true)
options = options or {}
local inline = options.inline
local hatnote = mw.html.create(inline == 1 and 'span' or 'div')
local extraclasses
if type(options.extraclasses) == 'string' then
extraclasses = options.extraclasses
end
hatnote
:attr('role', 'note')
:addClass(p.defaultClasses(inline))
:addClass(extraclasses)
:addClass(options.selfref and 'selfref' or nil)
:wikitext(s)
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' }
} .. tostring(hatnote)
end
return p
3ae1ed7094c5005ca0896395ec9a587287a0bef1
Module:Unicode data/scripts
828
249
722
2022-09-28T15:04:27Z
wikipedia>Drmccreedy
0
Revert script name Nko back to NKo per request
Scribunto
text/plain
--[=[
-- Official Unicode script values for individual codepoints and ranges of
-- codepoints.
-- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided
-- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt
-- provided script codes corresponding to the names (see [[Script (Unicode)]]).
--]=]
local data = {
singles = {
[0x000AA] = "Latn",
[0x000BA] = "Latn",
[0x000D7] = "Zyyy",
[0x000F7] = "Zyyy",
[0x00374] = "Zyyy",
[0x0037E] = "Zyyy",
[0x0037F] = "Grek",
[0x00384] = "Grek",
[0x00385] = "Zyyy",
[0x00386] = "Grek",
[0x00387] = "Zyyy",
[0x0038C] = "Grek",
[0x00605] = "Zyyy",
[0x0060C] = "Zyyy",
[0x0061B] = "Zyyy",
[0x0061F] = "Zyyy",
[0x00640] = "Zyyy",
[0x00670] = "Zinh",
[0x006DD] = "Zyyy",
[0x0085E] = "Mand",
[0x008E2] = "Zyyy",
[0x009B2] = "Beng",
[0x009D7] = "Beng",
[0x00A3C] = "Guru",
[0x00A51] = "Guru",
[0x00A5E] = "Guru",
[0x00AD0] = "Gujr",
[0x00B9C] = "Taml",
[0x00BD0] = "Taml",
[0x00BD7] = "Taml",
[0x00C5D] = "Telu",
[0x00DBD] = "Sinh",
[0x00DCA] = "Sinh",
[0x00DD6] = "Sinh",
[0x00E3F] = "Zyyy",
[0x00E84] = "Laoo",
[0x00EA5] = "Laoo",
[0x00EC6] = "Laoo",
[0x010C7] = "Geor",
[0x010CD] = "Geor",
[0x010FB] = "Zyyy",
[0x01258] = "Ethi",
[0x012C0] = "Ethi",
[0x0171F] = "Tglg",
[0x01804] = "Mong",
[0x01805] = "Zyyy",
[0x01940] = "Limb",
[0x01CD3] = "Zyyy",
[0x01CE1] = "Zyyy",
[0x01CED] = "Zinh",
[0x01CF4] = "Zinh",
[0x01CFA] = "Zyyy",
[0x01D2B] = "Cyrl",
[0x01D78] = "Cyrl",
[0x01DBF] = "Grek",
[0x01F59] = "Grek",
[0x01F5B] = "Grek",
[0x01F5D] = "Grek",
[0x02071] = "Latn",
[0x0207F] = "Latn",
[0x02126] = "Grek",
[0x02132] = "Latn",
[0x0214E] = "Latn",
[0x02D27] = "Geor",
[0x02D2D] = "Geor",
[0x02D7F] = "Tfng",
[0x03005] = "Hani",
[0x03006] = "Zyyy",
[0x03007] = "Hani",
[0x030A0] = "Zyyy",
[0x032FF] = "Zyyy",
[0x0A7D3] = "Latn",
[0x0A92E] = "Zyyy",
[0x0A92F] = "Kali",
[0x0A95F] = "Rjng",
[0x0A9CF] = "Zyyy",
[0x0AB5B] = "Zyyy",
[0x0AB65] = "Grek",
[0x0FB3E] = "Hebr",
[0x0FDCF] = "Arab",
[0x0FEFF] = "Zyyy",
[0x0FF70] = "Zyyy",
[0x101A0] = "Grek",
[0x101FD] = "Zinh",
[0x102E0] = "Zinh",
[0x1039F] = "Ugar",
[0x1056F] = "Aghb",
[0x10808] = "Cprt",
[0x1083C] = "Cprt",
[0x1083F] = "Cprt",
[0x1091F] = "Phnx",
[0x1093F] = "Lydi",
[0x1107F] = "Brah",
[0x110CD] = "Kthi",
[0x11288] = "Mult",
[0x1133B] = "Zinh",
[0x11350] = "Gran",
[0x11357] = "Gran",
[0x118FF] = "Wara",
[0x11909] = "Diak",
[0x11D3A] = "Gonm",
[0x11FB0] = "Lisu",
[0x11FFF] = "Taml",
[0x16FE0] = "Tang",
[0x16FE1] = "Nshu",
[0x16FE4] = "Kits",
[0x1B000] = "Kana",
[0x1B132] = "Hira",
[0x1B155] = "Kana",
[0x1D4A2] = "Zyyy",
[0x1D4BB] = "Zyyy",
[0x1D546] = "Zyyy",
[0x1E08F] = "Cyrl",
[0x1E2FF] = "Wcho",
[0x1EE24] = "Arab",
[0x1EE27] = "Arab",
[0x1EE39] = "Arab",
[0x1EE3B] = "Arab",
[0x1EE42] = "Arab",
[0x1EE47] = "Arab",
[0x1EE49] = "Arab",
[0x1EE4B] = "Arab",
[0x1EE54] = "Arab",
[0x1EE57] = "Arab",
[0x1EE59] = "Arab",
[0x1EE5B] = "Arab",
[0x1EE5D] = "Arab",
[0x1EE5F] = "Arab",
[0x1EE64] = "Arab",
[0x1EE7E] = "Arab",
[0x1F200] = "Hira",
[0x1F7F0] = "Zyyy",
[0xE0001] = "Zyyy",
},
ranges = {
{ 0x00000, 0x00040, "Zyyy" },
{ 0x00041, 0x0005A, "Latn" },
{ 0x0005B, 0x00060, "Zyyy" },
{ 0x00061, 0x0007A, "Latn" },
{ 0x0007B, 0x000A9, "Zyyy" },
{ 0x000AB, 0x000B9, "Zyyy" },
{ 0x000BB, 0x000BF, "Zyyy" },
{ 0x000C0, 0x000D6, "Latn" },
{ 0x000D8, 0x000F6, "Latn" },
{ 0x000F8, 0x002B8, "Latn" },
{ 0x002B9, 0x002DF, "Zyyy" },
{ 0x002E0, 0x002E4, "Latn" },
{ 0x002E5, 0x002E9, "Zyyy" },
{ 0x002EA, 0x002EB, "Bopo" },
{ 0x002EC, 0x002FF, "Zyyy" },
{ 0x00300, 0x0036F, "Zinh" },
{ 0x00370, 0x00373, "Grek" },
{ 0x00375, 0x00377, "Grek" },
{ 0x0037A, 0x0037D, "Grek" },
{ 0x00388, 0x0038A, "Grek" },
{ 0x0038E, 0x003A1, "Grek" },
{ 0x003A3, 0x003E1, "Grek" },
{ 0x003E2, 0x003EF, "Copt" },
{ 0x003F0, 0x003FF, "Grek" },
{ 0x00400, 0x00484, "Cyrl" },
{ 0x00485, 0x00486, "Zinh" },
{ 0x00487, 0x0052F, "Cyrl" },
{ 0x00531, 0x00556, "Armn" },
{ 0x00559, 0x0058A, "Armn" },
{ 0x0058D, 0x0058F, "Armn" },
{ 0x00591, 0x005C7, "Hebr" },
{ 0x005D0, 0x005EA, "Hebr" },
{ 0x005EF, 0x005F4, "Hebr" },
{ 0x00600, 0x00604, "Arab" },
{ 0x00606, 0x0060B, "Arab" },
{ 0x0060D, 0x0061A, "Arab" },
{ 0x0061C, 0x0061E, "Arab" },
{ 0x00620, 0x0063F, "Arab" },
{ 0x00641, 0x0064A, "Arab" },
{ 0x0064B, 0x00655, "Zinh" },
{ 0x00656, 0x0066F, "Arab" },
{ 0x00671, 0x006DC, "Arab" },
{ 0x006DE, 0x006FF, "Arab" },
{ 0x00700, 0x0070D, "Syrc" },
{ 0x0070F, 0x0074A, "Syrc" },
{ 0x0074D, 0x0074F, "Syrc" },
{ 0x00750, 0x0077F, "Arab" },
{ 0x00780, 0x007B1, "Thaa" },
{ 0x007C0, 0x007FA, "Nkoo" },
{ 0x007FD, 0x007FF, "Nkoo" },
{ 0x00800, 0x0082D, "Samr" },
{ 0x00830, 0x0083E, "Samr" },
{ 0x00840, 0x0085B, "Mand" },
{ 0x00860, 0x0086A, "Syrc" },
{ 0x00870, 0x0088E, "Arab" },
{ 0x00890, 0x00891, "Arab" },
{ 0x00898, 0x008E1, "Arab" },
{ 0x008E3, 0x008FF, "Arab" },
{ 0x00900, 0x00950, "Deva" },
{ 0x00951, 0x00954, "Zinh" },
{ 0x00955, 0x00963, "Deva" },
{ 0x00964, 0x00965, "Zyyy" },
{ 0x00966, 0x0097F, "Deva" },
{ 0x00980, 0x00983, "Beng" },
{ 0x00985, 0x0098C, "Beng" },
{ 0x0098F, 0x00990, "Beng" },
{ 0x00993, 0x009A8, "Beng" },
{ 0x009AA, 0x009B0, "Beng" },
{ 0x009B6, 0x009B9, "Beng" },
{ 0x009BC, 0x009C4, "Beng" },
{ 0x009C7, 0x009C8, "Beng" },
{ 0x009CB, 0x009CE, "Beng" },
{ 0x009DC, 0x009DD, "Beng" },
{ 0x009DF, 0x009E3, "Beng" },
{ 0x009E6, 0x009FE, "Beng" },
{ 0x00A01, 0x00A03, "Guru" },
{ 0x00A05, 0x00A0A, "Guru" },
{ 0x00A0F, 0x00A10, "Guru" },
{ 0x00A13, 0x00A28, "Guru" },
{ 0x00A2A, 0x00A30, "Guru" },
{ 0x00A32, 0x00A33, "Guru" },
{ 0x00A35, 0x00A36, "Guru" },
{ 0x00A38, 0x00A39, "Guru" },
{ 0x00A3E, 0x00A42, "Guru" },
{ 0x00A47, 0x00A48, "Guru" },
{ 0x00A4B, 0x00A4D, "Guru" },
{ 0x00A59, 0x00A5C, "Guru" },
{ 0x00A66, 0x00A76, "Guru" },
{ 0x00A81, 0x00A83, "Gujr" },
{ 0x00A85, 0x00A8D, "Gujr" },
{ 0x00A8F, 0x00A91, "Gujr" },
{ 0x00A93, 0x00AA8, "Gujr" },
{ 0x00AAA, 0x00AB0, "Gujr" },
{ 0x00AB2, 0x00AB3, "Gujr" },
{ 0x00AB5, 0x00AB9, "Gujr" },
{ 0x00ABC, 0x00AC5, "Gujr" },
{ 0x00AC7, 0x00AC9, "Gujr" },
{ 0x00ACB, 0x00ACD, "Gujr" },
{ 0x00AE0, 0x00AE3, "Gujr" },
{ 0x00AE6, 0x00AF1, "Gujr" },
{ 0x00AF9, 0x00AFF, "Gujr" },
{ 0x00B01, 0x00B03, "Orya" },
{ 0x00B05, 0x00B0C, "Orya" },
{ 0x00B0F, 0x00B10, "Orya" },
{ 0x00B13, 0x00B28, "Orya" },
{ 0x00B2A, 0x00B30, "Orya" },
{ 0x00B32, 0x00B33, "Orya" },
{ 0x00B35, 0x00B39, "Orya" },
{ 0x00B3C, 0x00B44, "Orya" },
{ 0x00B47, 0x00B48, "Orya" },
{ 0x00B4B, 0x00B4D, "Orya" },
{ 0x00B55, 0x00B57, "Orya" },
{ 0x00B5C, 0x00B5D, "Orya" },
{ 0x00B5F, 0x00B63, "Orya" },
{ 0x00B66, 0x00B77, "Orya" },
{ 0x00B82, 0x00B83, "Taml" },
{ 0x00B85, 0x00B8A, "Taml" },
{ 0x00B8E, 0x00B90, "Taml" },
{ 0x00B92, 0x00B95, "Taml" },
{ 0x00B99, 0x00B9A, "Taml" },
{ 0x00B9E, 0x00B9F, "Taml" },
{ 0x00BA3, 0x00BA4, "Taml" },
{ 0x00BA8, 0x00BAA, "Taml" },
{ 0x00BAE, 0x00BB9, "Taml" },
{ 0x00BBE, 0x00BC2, "Taml" },
{ 0x00BC6, 0x00BC8, "Taml" },
{ 0x00BCA, 0x00BCD, "Taml" },
{ 0x00BE6, 0x00BFA, "Taml" },
{ 0x00C00, 0x00C0C, "Telu" },
{ 0x00C0E, 0x00C10, "Telu" },
{ 0x00C12, 0x00C28, "Telu" },
{ 0x00C2A, 0x00C39, "Telu" },
{ 0x00C3C, 0x00C44, "Telu" },
{ 0x00C46, 0x00C48, "Telu" },
{ 0x00C4A, 0x00C4D, "Telu" },
{ 0x00C55, 0x00C56, "Telu" },
{ 0x00C58, 0x00C5A, "Telu" },
{ 0x00C60, 0x00C63, "Telu" },
{ 0x00C66, 0x00C6F, "Telu" },
{ 0x00C77, 0x00C7F, "Telu" },
{ 0x00C80, 0x00C8C, "Knda" },
{ 0x00C8E, 0x00C90, "Knda" },
{ 0x00C92, 0x00CA8, "Knda" },
{ 0x00CAA, 0x00CB3, "Knda" },
{ 0x00CB5, 0x00CB9, "Knda" },
{ 0x00CBC, 0x00CC4, "Knda" },
{ 0x00CC6, 0x00CC8, "Knda" },
{ 0x00CCA, 0x00CCD, "Knda" },
{ 0x00CD5, 0x00CD6, "Knda" },
{ 0x00CDD, 0x00CDE, "Knda" },
{ 0x00CE0, 0x00CE3, "Knda" },
{ 0x00CE6, 0x00CEF, "Knda" },
{ 0x00CF1, 0x00CF3, "Knda" },
{ 0x00D00, 0x00D0C, "Mlym" },
{ 0x00D0E, 0x00D10, "Mlym" },
{ 0x00D12, 0x00D44, "Mlym" },
{ 0x00D46, 0x00D48, "Mlym" },
{ 0x00D4A, 0x00D4F, "Mlym" },
{ 0x00D54, 0x00D63, "Mlym" },
{ 0x00D66, 0x00D7F, "Mlym" },
{ 0x00D81, 0x00D83, "Sinh" },
{ 0x00D85, 0x00D96, "Sinh" },
{ 0x00D9A, 0x00DB1, "Sinh" },
{ 0x00DB3, 0x00DBB, "Sinh" },
{ 0x00DC0, 0x00DC6, "Sinh" },
{ 0x00DCF, 0x00DD4, "Sinh" },
{ 0x00DD8, 0x00DDF, "Sinh" },
{ 0x00DE6, 0x00DEF, "Sinh" },
{ 0x00DF2, 0x00DF4, "Sinh" },
{ 0x00E01, 0x00E3A, "Thai" },
{ 0x00E40, 0x00E5B, "Thai" },
{ 0x00E81, 0x00E82, "Laoo" },
{ 0x00E86, 0x00E8A, "Laoo" },
{ 0x00E8C, 0x00EA3, "Laoo" },
{ 0x00EA7, 0x00EBD, "Laoo" },
{ 0x00EC0, 0x00EC4, "Laoo" },
{ 0x00EC8, 0x00ECE, "Laoo" },
{ 0x00ED0, 0x00ED9, "Laoo" },
{ 0x00EDC, 0x00EDF, "Laoo" },
{ 0x00F00, 0x00F47, "Tibt" },
{ 0x00F49, 0x00F6C, "Tibt" },
{ 0x00F71, 0x00F97, "Tibt" },
{ 0x00F99, 0x00FBC, "Tibt" },
{ 0x00FBE, 0x00FCC, "Tibt" },
{ 0x00FCE, 0x00FD4, "Tibt" },
{ 0x00FD5, 0x00FD8, "Zyyy" },
{ 0x00FD9, 0x00FDA, "Tibt" },
{ 0x01000, 0x0109F, "Mymr" },
{ 0x010A0, 0x010C5, "Geor" },
{ 0x010D0, 0x010FA, "Geor" },
{ 0x010FC, 0x010FF, "Geor" },
{ 0x01100, 0x011FF, "Hang" },
{ 0x01200, 0x01248, "Ethi" },
{ 0x0124A, 0x0124D, "Ethi" },
{ 0x01250, 0x01256, "Ethi" },
{ 0x0125A, 0x0125D, "Ethi" },
{ 0x01260, 0x01288, "Ethi" },
{ 0x0128A, 0x0128D, "Ethi" },
{ 0x01290, 0x012B0, "Ethi" },
{ 0x012B2, 0x012B5, "Ethi" },
{ 0x012B8, 0x012BE, "Ethi" },
{ 0x012C2, 0x012C5, "Ethi" },
{ 0x012C8, 0x012D6, "Ethi" },
{ 0x012D8, 0x01310, "Ethi" },
{ 0x01312, 0x01315, "Ethi" },
{ 0x01318, 0x0135A, "Ethi" },
{ 0x0135D, 0x0137C, "Ethi" },
{ 0x01380, 0x01399, "Ethi" },
{ 0x013A0, 0x013F5, "Cher" },
{ 0x013F8, 0x013FD, "Cher" },
{ 0x01400, 0x0167F, "Cans" },
{ 0x01680, 0x0169C, "Ogam" },
{ 0x016A0, 0x016EA, "Runr" },
{ 0x016EB, 0x016ED, "Zyyy" },
{ 0x016EE, 0x016F8, "Runr" },
{ 0x01700, 0x01715, "Tglg" },
{ 0x01720, 0x01734, "Hano" },
{ 0x01735, 0x01736, "Zyyy" },
{ 0x01740, 0x01753, "Buhd" },
{ 0x01760, 0x0176C, "Tagb" },
{ 0x0176E, 0x01770, "Tagb" },
{ 0x01772, 0x01773, "Tagb" },
{ 0x01780, 0x017DD, "Khmr" },
{ 0x017E0, 0x017E9, "Khmr" },
{ 0x017F0, 0x017F9, "Khmr" },
{ 0x01800, 0x01801, "Mong" },
{ 0x01802, 0x01803, "Zyyy" },
{ 0x01806, 0x01819, "Mong" },
{ 0x01820, 0x01878, "Mong" },
{ 0x01880, 0x018AA, "Mong" },
{ 0x018B0, 0x018F5, "Cans" },
{ 0x01900, 0x0191E, "Limb" },
{ 0x01920, 0x0192B, "Limb" },
{ 0x01930, 0x0193B, "Limb" },
{ 0x01944, 0x0194F, "Limb" },
{ 0x01950, 0x0196D, "Tale" },
{ 0x01970, 0x01974, "Tale" },
{ 0x01980, 0x019AB, "Talu" },
{ 0x019B0, 0x019C9, "Talu" },
{ 0x019D0, 0x019DA, "Talu" },
{ 0x019DE, 0x019DF, "Talu" },
{ 0x019E0, 0x019FF, "Khmr" },
{ 0x01A00, 0x01A1B, "Bugi" },
{ 0x01A1E, 0x01A1F, "Bugi" },
{ 0x01A20, 0x01A5E, "Lana" },
{ 0x01A60, 0x01A7C, "Lana" },
{ 0x01A7F, 0x01A89, "Lana" },
{ 0x01A90, 0x01A99, "Lana" },
{ 0x01AA0, 0x01AAD, "Lana" },
{ 0x01AB0, 0x01ACE, "Zinh" },
{ 0x01B00, 0x01B4C, "Bali" },
{ 0x01B50, 0x01B7E, "Bali" },
{ 0x01B80, 0x01BBF, "Sund" },
{ 0x01BC0, 0x01BF3, "Batk" },
{ 0x01BFC, 0x01BFF, "Batk" },
{ 0x01C00, 0x01C37, "Lepc" },
{ 0x01C3B, 0x01C49, "Lepc" },
{ 0x01C4D, 0x01C4F, "Lepc" },
{ 0x01C50, 0x01C7F, "Olck" },
{ 0x01C80, 0x01C88, "Cyrl" },
{ 0x01C90, 0x01CBA, "Geor" },
{ 0x01CBD, 0x01CBF, "Geor" },
{ 0x01CC0, 0x01CC7, "Sund" },
{ 0x01CD0, 0x01CD2, "Zinh" },
{ 0x01CD4, 0x01CE0, "Zinh" },
{ 0x01CE2, 0x01CE8, "Zinh" },
{ 0x01CE9, 0x01CEC, "Zyyy" },
{ 0x01CEE, 0x01CF3, "Zyyy" },
{ 0x01CF5, 0x01CF7, "Zyyy" },
{ 0x01CF8, 0x01CF9, "Zinh" },
{ 0x01D00, 0x01D25, "Latn" },
{ 0x01D26, 0x01D2A, "Grek" },
{ 0x01D2C, 0x01D5C, "Latn" },
{ 0x01D5D, 0x01D61, "Grek" },
{ 0x01D62, 0x01D65, "Latn" },
{ 0x01D66, 0x01D6A, "Grek" },
{ 0x01D6B, 0x01D77, "Latn" },
{ 0x01D79, 0x01DBE, "Latn" },
{ 0x01DC0, 0x01DFF, "Zinh" },
{ 0x01E00, 0x01EFF, "Latn" },
{ 0x01F00, 0x01F15, "Grek" },
{ 0x01F18, 0x01F1D, "Grek" },
{ 0x01F20, 0x01F45, "Grek" },
{ 0x01F48, 0x01F4D, "Grek" },
{ 0x01F50, 0x01F57, "Grek" },
{ 0x01F5F, 0x01F7D, "Grek" },
{ 0x01F80, 0x01FB4, "Grek" },
{ 0x01FB6, 0x01FC4, "Grek" },
{ 0x01FC6, 0x01FD3, "Grek" },
{ 0x01FD6, 0x01FDB, "Grek" },
{ 0x01FDD, 0x01FEF, "Grek" },
{ 0x01FF2, 0x01FF4, "Grek" },
{ 0x01FF6, 0x01FFE, "Grek" },
{ 0x02000, 0x0200B, "Zyyy" },
{ 0x0200C, 0x0200D, "Zinh" },
{ 0x0200E, 0x02064, "Zyyy" },
{ 0x02066, 0x02070, "Zyyy" },
{ 0x02074, 0x0207E, "Zyyy" },
{ 0x02080, 0x0208E, "Zyyy" },
{ 0x02090, 0x0209C, "Latn" },
{ 0x020A0, 0x020C0, "Zyyy" },
{ 0x020D0, 0x020F0, "Zinh" },
{ 0x02100, 0x02125, "Zyyy" },
{ 0x02127, 0x02129, "Zyyy" },
{ 0x0212A, 0x0212B, "Latn" },
{ 0x0212C, 0x02131, "Zyyy" },
{ 0x02133, 0x0214D, "Zyyy" },
{ 0x0214F, 0x0215F, "Zyyy" },
{ 0x02160, 0x02188, "Latn" },
{ 0x02189, 0x0218B, "Zyyy" },
{ 0x02190, 0x02426, "Zyyy" },
{ 0x02440, 0x0244A, "Zyyy" },
{ 0x02460, 0x027FF, "Zyyy" },
{ 0x02800, 0x028FF, "Brai" },
{ 0x02900, 0x02B73, "Zyyy" },
{ 0x02B76, 0x02B95, "Zyyy" },
{ 0x02B97, 0x02BFF, "Zyyy" },
{ 0x02C00, 0x02C5F, "Glag" },
{ 0x02C60, 0x02C7F, "Latn" },
{ 0x02C80, 0x02CF3, "Copt" },
{ 0x02CF9, 0x02CFF, "Copt" },
{ 0x02D00, 0x02D25, "Geor" },
{ 0x02D30, 0x02D67, "Tfng" },
{ 0x02D6F, 0x02D70, "Tfng" },
{ 0x02D80, 0x02D96, "Ethi" },
{ 0x02DA0, 0x02DA6, "Ethi" },
{ 0x02DA8, 0x02DAE, "Ethi" },
{ 0x02DB0, 0x02DB6, "Ethi" },
{ 0x02DB8, 0x02DBE, "Ethi" },
{ 0x02DC0, 0x02DC6, "Ethi" },
{ 0x02DC8, 0x02DCE, "Ethi" },
{ 0x02DD0, 0x02DD6, "Ethi" },
{ 0x02DD8, 0x02DDE, "Ethi" },
{ 0x02DE0, 0x02DFF, "Cyrl" },
{ 0x02E00, 0x02E5D, "Zyyy" },
{ 0x02E80, 0x02E99, "Hani" },
{ 0x02E9B, 0x02EF3, "Hani" },
{ 0x02F00, 0x02FD5, "Hani" },
{ 0x02FF0, 0x02FFB, "Zyyy" },
{ 0x03000, 0x03004, "Zyyy" },
{ 0x03008, 0x03020, "Zyyy" },
{ 0x03021, 0x03029, "Hani" },
{ 0x0302A, 0x0302D, "Zinh" },
{ 0x0302E, 0x0302F, "Hang" },
{ 0x03030, 0x03037, "Zyyy" },
{ 0x03038, 0x0303B, "Hani" },
{ 0x0303C, 0x0303F, "Zyyy" },
{ 0x03041, 0x03096, "Hira" },
{ 0x03099, 0x0309A, "Zinh" },
{ 0x0309B, 0x0309C, "Zyyy" },
{ 0x0309D, 0x0309F, "Hira" },
{ 0x030A1, 0x030FA, "Kana" },
{ 0x030FB, 0x030FC, "Zyyy" },
{ 0x030FD, 0x030FF, "Kana" },
{ 0x03105, 0x0312F, "Bopo" },
{ 0x03131, 0x0318E, "Hang" },
{ 0x03190, 0x0319F, "Zyyy" },
{ 0x031A0, 0x031BF, "Bopo" },
{ 0x031C0, 0x031E3, "Zyyy" },
{ 0x031F0, 0x031FF, "Kana" },
{ 0x03200, 0x0321E, "Hang" },
{ 0x03220, 0x0325F, "Zyyy" },
{ 0x03260, 0x0327E, "Hang" },
{ 0x0327F, 0x032CF, "Zyyy" },
{ 0x032D0, 0x032FE, "Kana" },
{ 0x03300, 0x03357, "Kana" },
{ 0x03358, 0x033FF, "Zyyy" },
{ 0x03400, 0x04DBF, "Hani" },
{ 0x04DC0, 0x04DFF, "Zyyy" },
{ 0x04E00, 0x09FFF, "Hani" },
{ 0x0A000, 0x0A48C, "Yiii" },
{ 0x0A490, 0x0A4C6, "Yiii" },
{ 0x0A4D0, 0x0A4FF, "Lisu" },
{ 0x0A500, 0x0A62B, "Vaii" },
{ 0x0A640, 0x0A69F, "Cyrl" },
{ 0x0A6A0, 0x0A6F7, "Bamu" },
{ 0x0A700, 0x0A721, "Zyyy" },
{ 0x0A722, 0x0A787, "Latn" },
{ 0x0A788, 0x0A78A, "Zyyy" },
{ 0x0A78B, 0x0A7CA, "Latn" },
{ 0x0A7D0, 0x0A7D1, "Latn" },
{ 0x0A7D5, 0x0A7D9, "Latn" },
{ 0x0A7F2, 0x0A7FF, "Latn" },
{ 0x0A800, 0x0A82C, "Sylo" },
{ 0x0A830, 0x0A839, "Zyyy" },
{ 0x0A840, 0x0A877, "Phag" },
{ 0x0A880, 0x0A8C5, "Saur" },
{ 0x0A8CE, 0x0A8D9, "Saur" },
{ 0x0A8E0, 0x0A8FF, "Deva" },
{ 0x0A900, 0x0A92D, "Kali" },
{ 0x0A930, 0x0A953, "Rjng" },
{ 0x0A960, 0x0A97C, "Hang" },
{ 0x0A980, 0x0A9CD, "Java" },
{ 0x0A9D0, 0x0A9D9, "Java" },
{ 0x0A9DE, 0x0A9DF, "Java" },
{ 0x0A9E0, 0x0A9FE, "Mymr" },
{ 0x0AA00, 0x0AA36, "Cham" },
{ 0x0AA40, 0x0AA4D, "Cham" },
{ 0x0AA50, 0x0AA59, "Cham" },
{ 0x0AA5C, 0x0AA5F, "Cham" },
{ 0x0AA60, 0x0AA7F, "Mymr" },
{ 0x0AA80, 0x0AAC2, "Tavt" },
{ 0x0AADB, 0x0AADF, "Tavt" },
{ 0x0AAE0, 0x0AAF6, "Mtei" },
{ 0x0AB01, 0x0AB06, "Ethi" },
{ 0x0AB09, 0x0AB0E, "Ethi" },
{ 0x0AB11, 0x0AB16, "Ethi" },
{ 0x0AB20, 0x0AB26, "Ethi" },
{ 0x0AB28, 0x0AB2E, "Ethi" },
{ 0x0AB30, 0x0AB5A, "Latn" },
{ 0x0AB5C, 0x0AB64, "Latn" },
{ 0x0AB66, 0x0AB69, "Latn" },
{ 0x0AB6A, 0x0AB6B, "Zyyy" },
{ 0x0AB70, 0x0ABBF, "Cher" },
{ 0x0ABC0, 0x0ABED, "Mtei" },
{ 0x0ABF0, 0x0ABF9, "Mtei" },
{ 0x0AC00, 0x0D7A3, "Hang" },
{ 0x0D7B0, 0x0D7C6, "Hang" },
{ 0x0D7CB, 0x0D7FB, "Hang" },
{ 0x0F900, 0x0FA6D, "Hani" },
{ 0x0FA70, 0x0FAD9, "Hani" },
{ 0x0FB00, 0x0FB06, "Latn" },
{ 0x0FB13, 0x0FB17, "Armn" },
{ 0x0FB1D, 0x0FB36, "Hebr" },
{ 0x0FB38, 0x0FB3C, "Hebr" },
{ 0x0FB40, 0x0FB41, "Hebr" },
{ 0x0FB43, 0x0FB44, "Hebr" },
{ 0x0FB46, 0x0FB4F, "Hebr" },
{ 0x0FB50, 0x0FBC2, "Arab" },
{ 0x0FBD3, 0x0FD3D, "Arab" },
{ 0x0FD3E, 0x0FD3F, "Zyyy" },
{ 0x0FD40, 0x0FD8F, "Arab" },
{ 0x0FD92, 0x0FDC7, "Arab" },
{ 0x0FDF0, 0x0FDFF, "Arab" },
{ 0x0FE00, 0x0FE0F, "Zinh" },
{ 0x0FE10, 0x0FE19, "Zyyy" },
{ 0x0FE20, 0x0FE2D, "Zinh" },
{ 0x0FE2E, 0x0FE2F, "Cyrl" },
{ 0x0FE30, 0x0FE52, "Zyyy" },
{ 0x0FE54, 0x0FE66, "Zyyy" },
{ 0x0FE68, 0x0FE6B, "Zyyy" },
{ 0x0FE70, 0x0FE74, "Arab" },
{ 0x0FE76, 0x0FEFC, "Arab" },
{ 0x0FF01, 0x0FF20, "Zyyy" },
{ 0x0FF21, 0x0FF3A, "Latn" },
{ 0x0FF3B, 0x0FF40, "Zyyy" },
{ 0x0FF41, 0x0FF5A, "Latn" },
{ 0x0FF5B, 0x0FF65, "Zyyy" },
{ 0x0FF66, 0x0FF6F, "Kana" },
{ 0x0FF71, 0x0FF9D, "Kana" },
{ 0x0FF9E, 0x0FF9F, "Zyyy" },
{ 0x0FFA0, 0x0FFBE, "Hang" },
{ 0x0FFC2, 0x0FFC7, "Hang" },
{ 0x0FFCA, 0x0FFCF, "Hang" },
{ 0x0FFD2, 0x0FFD7, "Hang" },
{ 0x0FFDA, 0x0FFDC, "Hang" },
{ 0x0FFE0, 0x0FFE6, "Zyyy" },
{ 0x0FFE8, 0x0FFEE, "Zyyy" },
{ 0x0FFF9, 0x0FFFD, "Zyyy" },
{ 0x10000, 0x1000B, "Linb" },
{ 0x1000D, 0x10026, "Linb" },
{ 0x10028, 0x1003A, "Linb" },
{ 0x1003C, 0x1003D, "Linb" },
{ 0x1003F, 0x1004D, "Linb" },
{ 0x10050, 0x1005D, "Linb" },
{ 0x10080, 0x100FA, "Linb" },
{ 0x10100, 0x10102, "Zyyy" },
{ 0x10107, 0x10133, "Zyyy" },
{ 0x10137, 0x1013F, "Zyyy" },
{ 0x10140, 0x1018E, "Grek" },
{ 0x10190, 0x1019C, "Zyyy" },
{ 0x101D0, 0x101FC, "Zyyy" },
{ 0x10280, 0x1029C, "Lyci" },
{ 0x102A0, 0x102D0, "Cari" },
{ 0x102E1, 0x102FB, "Zyyy" },
{ 0x10300, 0x10323, "Ital" },
{ 0x1032D, 0x1032F, "Ital" },
{ 0x10330, 0x1034A, "Goth" },
{ 0x10350, 0x1037A, "Perm" },
{ 0x10380, 0x1039D, "Ugar" },
{ 0x103A0, 0x103C3, "Xpeo" },
{ 0x103C8, 0x103D5, "Xpeo" },
{ 0x10400, 0x1044F, "Dsrt" },
{ 0x10450, 0x1047F, "Shaw" },
{ 0x10480, 0x1049D, "Osma" },
{ 0x104A0, 0x104A9, "Osma" },
{ 0x104B0, 0x104D3, "Osge" },
{ 0x104D8, 0x104FB, "Osge" },
{ 0x10500, 0x10527, "Elba" },
{ 0x10530, 0x10563, "Aghb" },
{ 0x10570, 0x1057A, "Vith" },
{ 0x1057C, 0x1058A, "Vith" },
{ 0x1058C, 0x10592, "Vith" },
{ 0x10594, 0x10595, "Vith" },
{ 0x10597, 0x105A1, "Vith" },
{ 0x105A3, 0x105B1, "Vith" },
{ 0x105B3, 0x105B9, "Vith" },
{ 0x105BB, 0x105BC, "Vith" },
{ 0x10600, 0x10736, "Lina" },
{ 0x10740, 0x10755, "Lina" },
{ 0x10760, 0x10767, "Lina" },
{ 0x10780, 0x10785, "Latn" },
{ 0x10787, 0x107B0, "Latn" },
{ 0x107B2, 0x107BA, "Latn" },
{ 0x10800, 0x10805, "Cprt" },
{ 0x1080A, 0x10835, "Cprt" },
{ 0x10837, 0x10838, "Cprt" },
{ 0x10840, 0x10855, "Armi" },
{ 0x10857, 0x1085F, "Armi" },
{ 0x10860, 0x1087F, "Palm" },
{ 0x10880, 0x1089E, "Nbat" },
{ 0x108A7, 0x108AF, "Nbat" },
{ 0x108E0, 0x108F2, "Hatr" },
{ 0x108F4, 0x108F5, "Hatr" },
{ 0x108FB, 0x108FF, "Hatr" },
{ 0x10900, 0x1091B, "Phnx" },
{ 0x10920, 0x10939, "Lydi" },
{ 0x10980, 0x1099F, "Mero" },
{ 0x109A0, 0x109B7, "Merc" },
{ 0x109BC, 0x109CF, "Merc" },
{ 0x109D2, 0x109FF, "Merc" },
{ 0x10A00, 0x10A03, "Khar" },
{ 0x10A05, 0x10A06, "Khar" },
{ 0x10A0C, 0x10A13, "Khar" },
{ 0x10A15, 0x10A17, "Khar" },
{ 0x10A19, 0x10A35, "Khar" },
{ 0x10A38, 0x10A3A, "Khar" },
{ 0x10A3F, 0x10A48, "Khar" },
{ 0x10A50, 0x10A58, "Khar" },
{ 0x10A60, 0x10A7F, "Sarb" },
{ 0x10A80, 0x10A9F, "Narb" },
{ 0x10AC0, 0x10AE6, "Mani" },
{ 0x10AEB, 0x10AF6, "Mani" },
{ 0x10B00, 0x10B35, "Avst" },
{ 0x10B39, 0x10B3F, "Avst" },
{ 0x10B40, 0x10B55, "Prti" },
{ 0x10B58, 0x10B5F, "Prti" },
{ 0x10B60, 0x10B72, "Phli" },
{ 0x10B78, 0x10B7F, "Phli" },
{ 0x10B80, 0x10B91, "Phlp" },
{ 0x10B99, 0x10B9C, "Phlp" },
{ 0x10BA9, 0x10BAF, "Phlp" },
{ 0x10C00, 0x10C48, "Orkh" },
{ 0x10C80, 0x10CB2, "Hung" },
{ 0x10CC0, 0x10CF2, "Hung" },
{ 0x10CFA, 0x10CFF, "Hung" },
{ 0x10D00, 0x10D27, "Rohg" },
{ 0x10D30, 0x10D39, "Rohg" },
{ 0x10E60, 0x10E7E, "Arab" },
{ 0x10E80, 0x10EA9, "Yezi" },
{ 0x10EAB, 0x10EAD, "Yezi" },
{ 0x10EB0, 0x10EB1, "Yezi" },
{ 0x10EFD, 0x10EFF, "Arab" },
{ 0x10F00, 0x10F27, "Sogo" },
{ 0x10F30, 0x10F59, "Sogd" },
{ 0x10F70, 0x10F89, "Ougr" },
{ 0x10FB0, 0x10FCB, "Chrs" },
{ 0x10FE0, 0x10FF6, "Elym" },
{ 0x11000, 0x1104D, "Brah" },
{ 0x11052, 0x11075, "Brah" },
{ 0x11080, 0x110C2, "Kthi" },
{ 0x110D0, 0x110E8, "Sora" },
{ 0x110F0, 0x110F9, "Sora" },
{ 0x11100, 0x11134, "Cakm" },
{ 0x11136, 0x11147, "Cakm" },
{ 0x11150, 0x11176, "Mahj" },
{ 0x11180, 0x111DF, "Shrd" },
{ 0x111E1, 0x111F4, "Sinh" },
{ 0x11200, 0x11211, "Khoj" },
{ 0x11213, 0x11241, "Khoj" },
{ 0x11280, 0x11286, "Mult" },
{ 0x1128A, 0x1128D, "Mult" },
{ 0x1128F, 0x1129D, "Mult" },
{ 0x1129F, 0x112A9, "Mult" },
{ 0x112B0, 0x112EA, "Sind" },
{ 0x112F0, 0x112F9, "Sind" },
{ 0x11300, 0x11303, "Gran" },
{ 0x11305, 0x1130C, "Gran" },
{ 0x1130F, 0x11310, "Gran" },
{ 0x11313, 0x11328, "Gran" },
{ 0x1132A, 0x11330, "Gran" },
{ 0x11332, 0x11333, "Gran" },
{ 0x11335, 0x11339, "Gran" },
{ 0x1133C, 0x11344, "Gran" },
{ 0x11347, 0x11348, "Gran" },
{ 0x1134B, 0x1134D, "Gran" },
{ 0x1135D, 0x11363, "Gran" },
{ 0x11366, 0x1136C, "Gran" },
{ 0x11370, 0x11374, "Gran" },
{ 0x11400, 0x1145B, "Newa" },
{ 0x1145D, 0x11461, "Newa" },
{ 0x11480, 0x114C7, "Tirh" },
{ 0x114D0, 0x114D9, "Tirh" },
{ 0x11580, 0x115B5, "Sidd" },
{ 0x115B8, 0x115DD, "Sidd" },
{ 0x11600, 0x11644, "Modi" },
{ 0x11650, 0x11659, "Modi" },
{ 0x11660, 0x1166C, "Mong" },
{ 0x11680, 0x116B9, "Takr" },
{ 0x116C0, 0x116C9, "Takr" },
{ 0x11700, 0x1171A, "Ahom" },
{ 0x1171D, 0x1172B, "Ahom" },
{ 0x11730, 0x11746, "Ahom" },
{ 0x11800, 0x1183B, "Dogr" },
{ 0x118A0, 0x118F2, "Wara" },
{ 0x11900, 0x11906, "Diak" },
{ 0x1190C, 0x11913, "Diak" },
{ 0x11915, 0x11916, "Diak" },
{ 0x11918, 0x11935, "Diak" },
{ 0x11937, 0x11938, "Diak" },
{ 0x1193B, 0x11946, "Diak" },
{ 0x11950, 0x11959, "Diak" },
{ 0x119A0, 0x119A7, "Nand" },
{ 0x119AA, 0x119D7, "Nand" },
{ 0x119DA, 0x119E4, "Nand" },
{ 0x11A00, 0x11A47, "Zanb" },
{ 0x11A50, 0x11AA2, "Soyo" },
{ 0x11AB0, 0x11ABF, "Cans" },
{ 0x11AC0, 0x11AF8, "Pauc" },
{ 0x11B00, 0x11B09, "Deva" },
{ 0x11C00, 0x11C08, "Bhks" },
{ 0x11C0A, 0x11C36, "Bhks" },
{ 0x11C38, 0x11C45, "Bhks" },
{ 0x11C50, 0x11C6C, "Bhks" },
{ 0x11C70, 0x11C8F, "Marc" },
{ 0x11C92, 0x11CA7, "Marc" },
{ 0x11CA9, 0x11CB6, "Marc" },
{ 0x11D00, 0x11D06, "Gonm" },
{ 0x11D08, 0x11D09, "Gonm" },
{ 0x11D0B, 0x11D36, "Gonm" },
{ 0x11D3C, 0x11D3D, "Gonm" },
{ 0x11D3F, 0x11D47, "Gonm" },
{ 0x11D50, 0x11D59, "Gonm" },
{ 0x11D60, 0x11D65, "Gong" },
{ 0x11D67, 0x11D68, "Gong" },
{ 0x11D6A, 0x11D8E, "Gong" },
{ 0x11D90, 0x11D91, "Gong" },
{ 0x11D93, 0x11D98, "Gong" },
{ 0x11DA0, 0x11DA9, "Gong" },
{ 0x11EE0, 0x11EF8, "Maka" },
{ 0x11F00, 0x11F10, "Kawi" },
{ 0x11F12, 0x11F3A, "Kawi" },
{ 0x11F3E, 0x11F59, "Kawi" },
{ 0x11FC0, 0x11FF1, "Taml" },
{ 0x12000, 0x12399, "Xsux" },
{ 0x12400, 0x1246E, "Xsux" },
{ 0x12470, 0x12474, "Xsux" },
{ 0x12480, 0x12543, "Xsux" },
{ 0x12F90, 0x12FF2, "Cpmn" },
{ 0x13000, 0x13455, "Egyp" },
{ 0x14400, 0x14646, "Hluw" },
{ 0x16800, 0x16A38, "Bamu" },
{ 0x16A40, 0x16A5E, "Mroo" },
{ 0x16A60, 0x16A69, "Mroo" },
{ 0x16A6E, 0x16A6F, "Mroo" },
{ 0x16A70, 0x16ABE, "Tnsa" },
{ 0x16AC0, 0x16AC9, "Tnsa" },
{ 0x16AD0, 0x16AED, "Bass" },
{ 0x16AF0, 0x16AF5, "Bass" },
{ 0x16B00, 0x16B45, "Hmng" },
{ 0x16B50, 0x16B59, "Hmng" },
{ 0x16B5B, 0x16B61, "Hmng" },
{ 0x16B63, 0x16B77, "Hmng" },
{ 0x16B7D, 0x16B8F, "Hmng" },
{ 0x16E40, 0x16E9A, "Medf" },
{ 0x16F00, 0x16F4A, "Plrd" },
{ 0x16F4F, 0x16F87, "Plrd" },
{ 0x16F8F, 0x16F9F, "Plrd" },
{ 0x16FE2, 0x16FE3, "Hani" },
{ 0x16FF0, 0x16FF1, "Hani" },
{ 0x17000, 0x187F7, "Tang" },
{ 0x18800, 0x18AFF, "Tang" },
{ 0x18B00, 0x18CD5, "Kits" },
{ 0x18D00, 0x18D08, "Tang" },
{ 0x1AFF0, 0x1AFF3, "Kana" },
{ 0x1AFF5, 0x1AFFB, "Kana" },
{ 0x1AFFD, 0x1AFFE, "Kana" },
{ 0x1B001, 0x1B11F, "Hira" },
{ 0x1B120, 0x1B122, "Kana" },
{ 0x1B150, 0x1B152, "Hira" },
{ 0x1B164, 0x1B167, "Kana" },
{ 0x1B170, 0x1B2FB, "Nshu" },
{ 0x1BC00, 0x1BC6A, "Dupl" },
{ 0x1BC70, 0x1BC7C, "Dupl" },
{ 0x1BC80, 0x1BC88, "Dupl" },
{ 0x1BC90, 0x1BC99, "Dupl" },
{ 0x1BC9C, 0x1BC9F, "Dupl" },
{ 0x1BCA0, 0x1BCA3, "Zyyy" },
{ 0x1CF00, 0x1CF2D, "Zinh" },
{ 0x1CF30, 0x1CF46, "Zinh" },
{ 0x1CF50, 0x1CFC3, "Zyyy" },
{ 0x1D000, 0x1D0F5, "Zyyy" },
{ 0x1D100, 0x1D126, "Zyyy" },
{ 0x1D129, 0x1D166, "Zyyy" },
{ 0x1D167, 0x1D169, "Zinh" },
{ 0x1D16A, 0x1D17A, "Zyyy" },
{ 0x1D17B, 0x1D182, "Zinh" },
{ 0x1D183, 0x1D184, "Zyyy" },
{ 0x1D185, 0x1D18B, "Zinh" },
{ 0x1D18C, 0x1D1A9, "Zyyy" },
{ 0x1D1AA, 0x1D1AD, "Zinh" },
{ 0x1D1AE, 0x1D1EA, "Zyyy" },
{ 0x1D200, 0x1D245, "Grek" },
{ 0x1D2C0, 0x1D2D3, "Zyyy" },
{ 0x1D2E0, 0x1D2F3, "Zyyy" },
{ 0x1D300, 0x1D356, "Zyyy" },
{ 0x1D360, 0x1D378, "Zyyy" },
{ 0x1D400, 0x1D454, "Zyyy" },
{ 0x1D456, 0x1D49C, "Zyyy" },
{ 0x1D49E, 0x1D49F, "Zyyy" },
{ 0x1D4A5, 0x1D4A6, "Zyyy" },
{ 0x1D4A9, 0x1D4AC, "Zyyy" },
{ 0x1D4AE, 0x1D4B9, "Zyyy" },
{ 0x1D4BD, 0x1D4C3, "Zyyy" },
{ 0x1D4C5, 0x1D505, "Zyyy" },
{ 0x1D507, 0x1D50A, "Zyyy" },
{ 0x1D50D, 0x1D514, "Zyyy" },
{ 0x1D516, 0x1D51C, "Zyyy" },
{ 0x1D51E, 0x1D539, "Zyyy" },
{ 0x1D53B, 0x1D53E, "Zyyy" },
{ 0x1D540, 0x1D544, "Zyyy" },
{ 0x1D54A, 0x1D550, "Zyyy" },
{ 0x1D552, 0x1D6A5, "Zyyy" },
{ 0x1D6A8, 0x1D7CB, "Zyyy" },
{ 0x1D7CE, 0x1D7FF, "Zyyy" },
{ 0x1D800, 0x1DA8B, "Sgnw" },
{ 0x1DA9B, 0x1DA9F, "Sgnw" },
{ 0x1DAA1, 0x1DAAF, "Sgnw" },
{ 0x1DF00, 0x1DF1E, "Latn" },
{ 0x1DF25, 0x1DF2A, "Latn" },
{ 0x1E000, 0x1E006, "Glag" },
{ 0x1E008, 0x1E018, "Glag" },
{ 0x1E01B, 0x1E021, "Glag" },
{ 0x1E023, 0x1E024, "Glag" },
{ 0x1E026, 0x1E02A, "Glag" },
{ 0x1E030, 0x1E06D, "Cyrl" },
{ 0x1E100, 0x1E12C, "Hmnp" },
{ 0x1E130, 0x1E13D, "Hmnp" },
{ 0x1E140, 0x1E149, "Hmnp" },
{ 0x1E14E, 0x1E14F, "Hmnp" },
{ 0x1E290, 0x1E2AE, "Toto" },
{ 0x1E2C0, 0x1E2F9, "Wcho" },
{ 0x1E4D0, 0x1E4F9, "Nagm" },
{ 0x1E7E0, 0x1E7E6, "Ethi" },
{ 0x1E7E8, 0x1E7EB, "Ethi" },
{ 0x1E7ED, 0x1E7EE, "Ethi" },
{ 0x1E7F0, 0x1E7FE, "Ethi" },
{ 0x1E800, 0x1E8C4, "Mend" },
{ 0x1E8C7, 0x1E8D6, "Mend" },
{ 0x1E900, 0x1E94B, "Adlm" },
{ 0x1E950, 0x1E959, "Adlm" },
{ 0x1E95E, 0x1E95F, "Adlm" },
{ 0x1EC71, 0x1ECB4, "Zyyy" },
{ 0x1ED01, 0x1ED3D, "Zyyy" },
{ 0x1EE00, 0x1EE03, "Arab" },
{ 0x1EE05, 0x1EE1F, "Arab" },
{ 0x1EE21, 0x1EE22, "Arab" },
{ 0x1EE29, 0x1EE32, "Arab" },
{ 0x1EE34, 0x1EE37, "Arab" },
{ 0x1EE4D, 0x1EE4F, "Arab" },
{ 0x1EE51, 0x1EE52, "Arab" },
{ 0x1EE61, 0x1EE62, "Arab" },
{ 0x1EE67, 0x1EE6A, "Arab" },
{ 0x1EE6C, 0x1EE72, "Arab" },
{ 0x1EE74, 0x1EE77, "Arab" },
{ 0x1EE79, 0x1EE7C, "Arab" },
{ 0x1EE80, 0x1EE89, "Arab" },
{ 0x1EE8B, 0x1EE9B, "Arab" },
{ 0x1EEA1, 0x1EEA3, "Arab" },
{ 0x1EEA5, 0x1EEA9, "Arab" },
{ 0x1EEAB, 0x1EEBB, "Arab" },
{ 0x1EEF0, 0x1EEF1, "Arab" },
{ 0x1F000, 0x1F02B, "Zyyy" },
{ 0x1F030, 0x1F093, "Zyyy" },
{ 0x1F0A0, 0x1F0AE, "Zyyy" },
{ 0x1F0B1, 0x1F0BF, "Zyyy" },
{ 0x1F0C1, 0x1F0CF, "Zyyy" },
{ 0x1F0D1, 0x1F0F5, "Zyyy" },
{ 0x1F100, 0x1F1AD, "Zyyy" },
{ 0x1F1E6, 0x1F1FF, "Zyyy" },
{ 0x1F201, 0x1F202, "Zyyy" },
{ 0x1F210, 0x1F23B, "Zyyy" },
{ 0x1F240, 0x1F248, "Zyyy" },
{ 0x1F250, 0x1F251, "Zyyy" },
{ 0x1F260, 0x1F265, "Zyyy" },
{ 0x1F300, 0x1F6D7, "Zyyy" },
{ 0x1F6DC, 0x1F6EC, "Zyyy" },
{ 0x1F6F0, 0x1F6FC, "Zyyy" },
{ 0x1F700, 0x1F776, "Zyyy" },
{ 0x1F77B, 0x1F7D9, "Zyyy" },
{ 0x1F7E0, 0x1F7EB, "Zyyy" },
{ 0x1F800, 0x1F80B, "Zyyy" },
{ 0x1F810, 0x1F847, "Zyyy" },
{ 0x1F850, 0x1F859, "Zyyy" },
{ 0x1F860, 0x1F887, "Zyyy" },
{ 0x1F890, 0x1F8AD, "Zyyy" },
{ 0x1F8B0, 0x1F8B1, "Zyyy" },
{ 0x1F900, 0x1FA53, "Zyyy" },
{ 0x1FA60, 0x1FA6D, "Zyyy" },
{ 0x1FA70, 0x1FA7C, "Zyyy" },
{ 0x1FA80, 0x1FA88, "Zyyy" },
{ 0x1FA90, 0x1FABD, "Zyyy" },
{ 0x1FABF, 0x1FAC5, "Zyyy" },
{ 0x1FACE, 0x1FADB, "Zyyy" },
{ 0x1FAE0, 0x1FAE8, "Zyyy" },
{ 0x1FAF0, 0x1FAF8, "Zyyy" },
{ 0x1FB00, 0x1FB92, "Zyyy" },
{ 0x1FB94, 0x1FBCA, "Zyyy" },
{ 0x1FBF0, 0x1FBF9, "Zyyy" },
{ 0x20000, 0x2A6DF, "Hani" },
{ 0x2A700, 0x2B739, "Hani" },
{ 0x2B740, 0x2B81D, "Hani" },
{ 0x2B820, 0x2CEA1, "Hani" },
{ 0x2CEB0, 0x2EBE0, "Hani" },
{ 0x2F800, 0x2FA1D, "Hani" },
{ 0x30000, 0x3134A, "Hani" },
{ 0x31350, 0x323AF, "Hani" },
{ 0xE0020, 0xE007F, "Zyyy" },
{ 0xE0100, 0xE01EF, "Zinh" },
},
-- Scripts.txt gives full names; here we consider them aliases to save space.
aliases = {
Adlm = "Adlam",
Aghb = "Caucasian Albanian",
Ahom = "Ahom",
Arab = "Arabic",
Armi = "Imperial Aramaic",
Armn = "Armenian",
Avst = "Avestan",
Bali = "Balinese",
Bamu = "Bamum",
Bass = "Bassa Vah",
Batk = "Batak",
Beng = "Bengali",
Bhks = "Bhaiksuki",
Bopo = "Bopomofo",
Brah = "Brahmi",
Brai = "Braille",
Bugi = "Buginese",
Buhd = "Buhid",
Cakm = "Chakma",
Cans = "Canadian Aboriginal",
Cari = "Carian",
Cham = "Cham",
Cher = "Cherokee",
Chrs = "Chorasmian",
Copt = "Coptic",
Cpmn = "Cypro Minoan",
Cprt = "Cypriot",
Cyrl = "Cyrillic",
Deva = "Devanagari",
Diak = "Dives Akuru",
Dogr = "Dogra",
Dsrt = "Deseret",
Dupl = "Duployan",
Egyp = "Egyptian Hieroglyphs",
Elba = "Elbasan",
Elym = "Elymaic",
Ethi = "Ethiopic",
Geor = "Georgian",
Glag = "Glagolitic",
Gong = "Gunjala Gondi",
Gonm = "Masaram Gondi",
Goth = "Gothic",
Gran = "Grantha",
Grek = "Greek",
Gujr = "Gujarati",
Guru = "Gurmukhi",
Hang = "Hangul",
Hani = "Han",
Hano = "Hanunoo",
Hatr = "Hatran",
Hebr = "Hebrew",
Hira = "Hiragana",
Hluw = "Anatolian Hieroglyphs",
Hmng = "Pahawh Hmong",
Hmnp = "Nyiakeng Puachue Hmong",
Hrkt = "Katakana Or Hiragana",
Hung = "Old Hungarian",
Ital = "Old Italic",
Java = "Javanese",
Kali = "Kayah Li",
Kana = "Katakana",
Kawi = "Kawi",
Khar = "Kharoshthi",
Khmr = "Khmer",
Khoj = "Khojki",
Kits = "Khitan Small Script",
Knda = "Kannada",
Kthi = "Kaithi",
Lana = "Tai Tham",
Laoo = "Lao",
Latn = "Latin",
Lepc = "Lepcha",
Limb = "Limbu",
Lina = "Linear A",
Linb = "Linear B",
Lisu = "Lisu",
Lyci = "Lycian",
Lydi = "Lydian",
Mahj = "Mahajani",
Maka = "Makasar",
Mand = "Mandaic",
Mani = "Manichaean",
Marc = "Marchen",
Medf = "Medefaidrin",
Mend = "Mende Kikakui",
Merc = "Meroitic Cursive",
Mero = "Meroitic Hieroglyphs",
Mlym = "Malayalam",
Modi = "Modi",
Mong = "Mongolian",
Mroo = "Mro",
Mtei = "Meetei Mayek",
Mult = "Multani",
Mymr = "Myanmar",
Nagm = "Nag Mundari",
Nand = "Nandinagari",
Narb = "Old North Arabian",
Nbat = "Nabataean",
Newa = "Newa",
Nkoo = "NKo",
Nshu = "Nushu",
Ogam = "Ogham",
Olck = "Ol Chiki",
Orkh = "Old Turkic",
Orya = "Oriya",
Osge = "Osage",
Osma = "Osmanya",
Ougr = "Old Uyghur",
Palm = "Palmyrene",
Pauc = "Pau Cin Hau",
Perm = "Old Permic",
Phag = "Phags Pa",
Phli = "Inscriptional Pahlavi",
Phlp = "Psalter Pahlavi",
Phnx = "Phoenician",
Plrd = "Miao",
Prti = "Inscriptional Parthian",
Rjng = "Rejang",
Rohg = "Hanifi Rohingya",
Runr = "Runic",
Samr = "Samaritan",
Sarb = "Old South Arabian",
Saur = "Saurashtra",
Sgnw = "SignWriting",
Shaw = "Shavian",
Shrd = "Sharada",
Sidd = "Siddham",
Sind = "Khudawadi",
Sinh = "Sinhala",
Sogd = "Sogdian",
Sogo = "Old Sogdian",
Sora = "Sora Sompeng",
Soyo = "Soyombo",
Sund = "Sundanese",
Sylo = "Syloti Nagri",
Syrc = "Syriac",
Tagb = "Tagbanwa",
Takr = "Takri",
Tale = "Tai Le",
Talu = "New Tai Lue",
Taml = "Tamil",
Tang = "Tangut",
Tavt = "Tai Viet",
Telu = "Telugu",
Tfng = "Tifinagh",
Tglg = "Tagalog",
Thaa = "Thaana",
Thai = "Thai",
Tibt = "Tibetan",
Tirh = "Tirhuta",
Tnsa = "Tangsa",
Toto = "Toto",
Ugar = "Ugaritic",
Vaii = "Vai",
Vith = "Vithkuqi",
Wara = "Warang Citi",
Wcho = "Wancho",
Xpeo = "Old Persian",
Xsux = "Cuneiform",
Yezi = "Yezidi",
Yiii = "Yi",
Zanb = "Zanabazar Square",
Zinh = "Inherited",
Zyyy = "Common",
Zzzz = "Unknown",
},
}
-- Required for binary search function in [[Module:Language/scripts]].
-- Cannot get length of module loaded with mw.loadData.
data.ranges.length = #data.ranges
data.rtl = {}
for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do
-- [[Module:Lang/data]] has script codes in lowercase;
-- this module has script codes with the first letter capitalized.
data.rtl[script:gsub("^%a", string.upper)] = true
end
return data
f887eb9f8d53e83c36af36a127f534c3e063e358
Module:Documentation
828
25
240
2022-09-29T01:57:36Z
wikipedia>Andrybak
0
update code comment according to [[Special:Diff/989669779]]
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return '<span class="' .. message('toolbar-class') .. '">('
.. table.concat(ret, ' | ') .. ')</span>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
:tag('div')
-- 'documentation-container'
:addClass(message('container'))
:attr('role', 'complementary')
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
:attr('aria-label', args.heading == '' and 'Documentation' or nil)
:newline()
:tag('div')
-- 'documentation'
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation-clear'
:addClass(message('clear'))
:done()
:newline()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the
-- same as the subject namespace. However, pages in the Article, File,
-- MediaWiki or Category namespaces must have their /doc, /sandbox and
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle
and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if compareUrl then
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(message('sandbox-category'))
-- 'documentation-clear'
return '<div class="' .. message('clear') .. '"></div>'
.. require('Module:Message box').main('ombox', omargs)
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editProt = protectionLevels.edit and protectionLevels.edit[1]
local moveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
-- The page is edit-protected.
return require('Module:Protection banner')._main{
message('protection-reason-edit'), small = true
}
elseif moveProt and moveProt ~= 'autoconfirmed' then
-- The page is move-protected but not edit-protected. Exclude move
-- protection with the level "autoconfirmed", as this is equivalent to
-- no move protection at all.
return require('Module:Protection banner')._main{
action = 'move', small = true
}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = message('view-link-display')
data.editLinkDisplay = message('edit-link-display')
data.historyLinkDisplay = message('history-link-display')
data.purgeLinkDisplay = message('purge-link-display')
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = message('create-link-display')
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities.
s = s:gsub('%]', ']')
return s
end
local ret
local docTitle = data.docTitle
local title = data.title
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink, purgeLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-link-classes')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('start-box-class'))
:newline()
:tag('span')
:addClass(data.headingClass)
:attr('id', 'documentation-heading')
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the link box.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
end
end
local box = mw.html.create('div')
-- 'documentation-metadata'
box:attr('role', 'note')
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return '\n' .. tostring(box)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Help:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = message('edit-link-display')
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = message('history-link-display')
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
2fd7faef98df56f55eede30c4ff07b2431823ee1
Template:((
10
37
73
2022-10-03T21:35:27Z
mw>Clump
0
Protected "[[Template:((]]": Highly visible page or template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
wikitext
text/x-wiki
{{<noinclude>
{{documentation}}[[Category:Workaround templates]]
</noinclude>
f8c63100e113b89d20396b75811d33e13b808f1a
Module:Format link
828
86
188
2022-10-04T13:37:11Z
wikipedia>Pppery
0
Avoid Lua erroring when we run out of expensive parser function calls
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Format link
--
-- Makes a wikilink from the given link and display values. Links are escaped
-- with colons if necessary, and links to sections are detected and displayed
-- with " § " as a separator rather than the standard MediaWiki "#". Used in
-- the {{format link}} template.
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local mError -- lazily initialise [[Module:Error]]
local yesno -- lazily initialise [[Module:Yesno]]
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
local function maybeItalicize(s, shouldItalicize)
-- Italicize s if s is a string and the shouldItalicize parameter is true.
if s and shouldItalicize then
return '<i>' .. s .. '</i>'
else
return s
end
end
local function parseLink(link)
-- Parse a link and return a table with the link's components.
-- These components are:
-- - link: the link, stripped of any initial colon (always present)
-- - page: the page name (always present)
-- - section: the page name (may be nil)
-- - display: the display text, if manually entered after a pipe (may be nil)
link = removeInitialColon(link)
-- Find whether a faux display value has been added with the {{!}} magic
-- word.
local prePipe, display = link:match('^(.-)|(.*)$')
link = prePipe or link
-- Find the page, if it exists.
-- For links like [[#Bar]], the page will be nil.
local preHash, postHash = link:match('^(.-)#(.*)$')
local page
if not preHash then
-- We have a link like [[Foo]].
page = link
elseif preHash ~= '' then
-- We have a link like [[Foo#Bar]].
page = preHash
end
-- Find the section, if it exists.
local section
if postHash and postHash ~= '' then
section = postHash
end
return {
link = link,
page = page,
section = section,
display = display,
}
end
local function formatDisplay(parsed, options)
-- Formats a display string based on a parsed link table (matching the
-- output of parseLink) and an options table (matching the input options for
-- _formatLink).
local page = maybeItalicize(parsed.page, options.italicizePage)
local section = maybeItalicize(parsed.section, options.italicizeSection)
if (not section) then
return page
elseif (not page) then
return mw.ustring.format('§ %s', section)
else
return mw.ustring.format('%s § %s', page, section)
end
end
local function missingArgError(target)
mError = require('Module:Error')
return mError.error{message =
'Error: no link or target specified! ([[' .. target .. '#Errors|help]])'
}
end
--------------------------------------------------------------------------------
-- Main functions
--------------------------------------------------------------------------------
function p.formatLink(frame)
-- The formatLink export function, for use in templates.
yesno = require('Module:Yesno')
local args = getArgs(frame)
local link = args[1] or args.link
local target = args[3] or args.target
if not (link or target) then
return missingArgError('Template:Format link')
end
return p._formatLink{
link = link,
display = args[2] or args.display,
target = target,
italicizePage = yesno(args.italicizepage),
italicizeSection = yesno(args.italicizesection),
categorizeMissing = args.categorizemissing
}
end
function p._formatLink(options)
-- The formatLink export function, for use in modules.
checkType('_formatLink', 1, options, 'table')
local function check(key, expectedType) --for brevity
checkTypeForNamedArg(
'_formatLink', key, options[key], expectedType or 'string', true
)
end
check('link')
check('display')
check('target')
check('italicizePage', 'boolean')
check('italicizeSection', 'boolean')
check('categorizeMissing')
-- Normalize link and target and check that at least one is present
if options.link == '' then options.link = nil end
if options.target == '' then options.target = nil end
if not (options.link or options.target) then
return missingArgError('Module:Format link')
end
local parsed = parseLink(options.link)
local display = options.display or parsed.display
local catMissing = options.categorizeMissing
local category = ''
-- Find the display text
if not display then display = formatDisplay(parsed, options) end
-- Handle the target option if present
if options.target then
local parsedTarget = parseLink(options.target)
parsed.link = parsedTarget.link
parsed.page = parsedTarget.page
end
-- Test if page exists if a diagnostic category is specified
if catMissing and (mw.ustring.len(catMissing) > 0) then
local title = nil
if parsed.page then title = mw.title.new(parsed.page) end
if title and (not title.isExternal) then
local success, exists = pcall(function() return title.exists end)
if success and not exists then
category = mw.ustring.format('[[Category:%s]]', catMissing)
end
end
end
-- Format the result as a link
if parsed.link == display then
return mw.ustring.format('[[:%s]]%s', parsed.link, category)
else
return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category)
end
end
--------------------------------------------------------------------------------
-- Derived convenience functions
--------------------------------------------------------------------------------
function p.formatPages(options, pages)
-- Formats an array of pages using formatLink and the given options table,
-- and returns it as an array. Nil values are not allowed.
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink{
link = page,
categorizeMissing = options.categorizeMissing,
italicizePage = options.italicizePage,
italicizeSection = options.italicizeSection
}
end
return ret
end
return p
1253bdd2683ee4badc33856bfd5499b09a7dca1f
Template:Flatlist
10
442
1333
2022-10-15T00:38:28Z
mw>Clump
0
Reverted edits by [[Special:Contribs/2600:6C55:6D00:1BF3:78C4:CB5F:986A:2409|2600:6C55:6D00:1BF3:78C4:CB5F:986A:2409]] ([[User talk:2600:6C55:6D00:1BF3:78C4:CB5F:986A:2409|talk]]) to last version by Clump
wikitext
text/x-wiki
<onlyinclude><templatestyles src="Template:Flatlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}</onlyinclude></div>
{{Documentation}}
457fae85129828fe5719eedf96107aac37dc02f4
Template:Plainlist/doc
10
41
81
2022-10-21T06:39:40Z
mw>ENeRZet
0
text editing
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
{{Uses TemplateStyles|Template:Plainlist/styles.css}}
This template provides a [[:en:Web Content Accessibility Guidelines|WCAG]]/ISO-standards-compliant accessible alternative to {{tag|br|s}} separated lists, which should not be used.
== Usage ==
{{tlx|plainlist}} starts a plain (i.e. unbulleted) list. It uses proper HTML list markup, which is more standards-compliant and more accessible than separating list items with {{tag|br|s}}. Detailed reasons for using this template can be found at [[:en:WP:UBLIST]].
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"description": {
"en": "Used to create plain (i.e. unbulleted) lists.",
"cs": "Slouží k vytváření jednoduchých (tj. bez odrážek) seznamů."
},
"format": "inline",
"params": {
"1": {
"label": {
"en": "Content",
"cs": "Obsah"
},
"description": {
"en": "The list to wrap.",
"cs": "Seznam k zabalení."
},
"suggested": true,
"type": "content"
},
"class": {
"label": {
"en": "Extra Classes",
"cs": "Extra třídy"
},
"description": {
"en": "Extra class names to add to the `class` attribute.",
"cs": "Další názvy tříd, které se mají přidat do atributu `class`."
},
"type": "string"
}
},
"paramOrder": [
"class",
"1"
]
}
</templatedata>
== See also ==
* {{tlx|Unbulleted list}} – Uses [[Module:List]]
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Formatting templates]]
}}</includeonly>
c5c829e1be67018c2403beee28b7f945f132c172
Module:Tree chart
828
209
596
2022-10-21T06:58:50Z
wikipedia>Legoktm
0
Replace [[Module:No globals]] with require( "strict" )
Scribunto
text/plain
require('strict')
local p = {}
local cells = mw.loadData('Module:Tree chart/data')
function p._main(cell_args)
local ret = mw.html.create()
local top = ret:tag('tr')
:css{ height = '1px',
['text-align'] = 'center' }
local bottom = ret:tag('tr')
:css{ height = '1px',
['text-align'] = 'center' }
for _, v in ipairs(cell_args) do
if type(v) == 'string' then
top:wikitext(cells[v].t)
bottom:wikitext(cells[v].b)
else
top:tag('td')
:attr{ colspan = v.colspan or cell_args.colspan or 6,
rowspan = v.rowspan or cell_args.rowspan or 2 }
:css{ padding = '0.2em',
border = (v.border or cell_args.border or '2') .. 'px solid black' }
:cssText(v.boxstyle or cell_args.boxstyle)
:wikitext(v.text)
end
end
return tostring(ret)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Tree chart', trim = false, removeBlanks = false})
local cell_args = {
colspan = args.colspan,
rowspan = args.rowspan,
border = args.border,
boxstyle = args.boxstyle
}
for _, val in ipairs(args) do
local trimmedVal = val:match('^%s*(.-)%s*$')
if trimmedVal == '' then
trimmedVal = '$'
end
if cells[trimmedVal] then
table.insert(cell_args, trimmedVal)
else
-- Unnamed params behave weirdly
-- white space at the front counts for param_{{{1}}}, but not whitespace at the end, so remove it
local rightTrimmedVal = val:gsub('%s+$','')
table.insert(cell_args, {
text = args[trimmedVal] or ('{{{'..trimmedVal..'}}}'),
colspan = args['colspan_'..rightTrimmedVal],
rowspan = args['rowspan_'..rightTrimmedVal],
border = args['border_'..rightTrimmedVal],
boxstyle = args['boxstyle_'..rightTrimmedVal]
})
end
end
return p._main(cell_args)
end
return p
6ae1652b12114e8af9fa123efd3bd2abc164e6fd
Module:Protection banner
828
97
210
2022-10-21T08:07:11Z
wikipedia>WOSlinker
0
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- Initialise necessary modules.
require('strict')
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main
local yesno = require('Module:Yesno')
-- Lazily initialise modules and objects we don't always need.
local getArgs, makeMessageBox, lang
-- Set constants.
local CONFIG_MODULE = 'Module:Protection banner/config'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function makeCategoryLink(cat, sort)
if cat then
return string.format(
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
cat,
sort
)
end
end
-- Validation function for the expiry and the protection date
local function validateDate(dateString, dateType)
if not lang then
lang = mw.language.getContentLanguage()
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
result = tonumber(result)
if result then
return result
end
end
error(string.format(
'invalid %s: %s',
dateType,
tostring(dateString)
), 4)
end
local function makeFullUrl(page, query, display)
return string.format(
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
display
)
end
-- Given a directed graph formatted as node -> table of direct successors,
-- get a table of all nodes reachable from a given node (though always
-- including the given node).
local function getReachableNodes(graph, start)
local toWalk, retval = {[start] = true}, {}
while true do
-- Can't use pairs() since we're adding and removing things as we're iterating
local k = next(toWalk) -- This always gets the "first" key
if k == nil then
return retval
end
toWalk[k] = nil
retval[k] = true
for _,v in ipairs(graph[k]) do
if not retval[v] then
toWalk[v] = true
end
end
end
end
--------------------------------------------------------------------------------
-- Protection class
--------------------------------------------------------------------------------
local Protection = {}
Protection.__index = Protection
Protection.supportedActions = {
edit = true,
move = true,
autoreview = true,
upload = true
}
Protection.bannerConfigFields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
function Protection.new(args, cfg, title)
local obj = {}
obj._cfg = cfg
obj.title = title or mw.title.getCurrentTitle()
-- Set action
if not args.action then
obj.action = 'edit'
elseif Protection.supportedActions[args.action] then
obj.action = args.action
else
error(string.format(
'invalid action: %s',
tostring(args.action)
), 3)
end
-- Set level
obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)
if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then
-- Users need to be autoconfirmed to move pages anyway, so treat
-- semi-move-protected pages as unprotected.
obj.level = '*'
end
-- Set expiry
local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)
if effectiveExpiry == 'infinity' then
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
end
-- Set reason
if args[1] then
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
end
end
-- Set protection date
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
end
-- Set banner config
do
obj.bannerConfig = {}
local configTables = {}
if cfg.banners[obj.action] then
configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]
end
if cfg.defaultBanners[obj.action] then
configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]
configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(Protection.bannerConfigFields) do
for j, t in ipairs(configTables) do
if t[field] then
obj.bannerConfig[field] = t[field]
break
end
end
end
end
return setmetatable(obj, Protection)
end
function Protection:isUserScript()
-- Whether the page is a user JavaScript or CSS page.
local title = self.title
return title.namespace == 2 and (
title.contentModel == 'javascript' or title.contentModel == 'css'
)
end
function Protection:isProtected()
return self.level ~= '*'
end
function Protection:shouldShowLock()
-- Whether we should output a banner/padlock
return self:isProtected() and not self:isUserScript()
end
-- Whether this page needs a protection category.
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock
function Protection:isTemporary()
return type(self.expiry) == 'number'
end
function Protection:makeProtectionCategory()
if not self:shouldHaveProtectionCategory() then
return ''
end
local cfg = self._cfg
local title = self.title
-- Get the expiry key fragment.
local expiryFragment
if self.expiry == 'indef' then
expiryFragment = self.expiry
elseif type(self.expiry) == 'number' then
expiryFragment = 'temp'
end
-- Get the namespace key fragment.
local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]
if not namespaceFragment and title.namespace % 2 == 1 then
namespaceFragment = 'talk'
end
-- Define the order that key fragments are tested in. This is done with an
-- array of tables containing the value to be tested, along with its
-- position in the cfg.protectionCategories table.
local order = {
{val = expiryFragment, keypos = 1},
{val = namespaceFragment, keypos = 2},
{val = self.reason, keypos = 3},
{val = self.level, keypos = 4},
{val = self.action, keypos = 5}
}
--[[
-- The old protection templates used an ad-hoc protection category system,
-- with some templates prioritising namespaces in their categories, and
-- others prioritising the protection reason. To emulate this in this module
-- we use the config table cfg.reasonsWithNamespacePriority to set the
-- reasons for which namespaces have priority over protection reason.
-- If we are dealing with one of those reasons, move the namespace table to
-- the end of the order table, i.e. give it highest priority. If not, the
-- reason should have highest priority, so move that to the end of the table
-- instead.
--]]
table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))
--[[
-- Define the attempt order. Inactive subtables (subtables with nil "value"
-- fields) are moved to the end, where they will later be given the key
-- "all". This is to cut down on the number of table lookups in
-- cfg.protectionCategories, which grows exponentially with the number of
-- non-nil keys. We keep track of the number of active subtables with the
-- noActive parameter.
--]]
local noActive, attemptOrder
do
local active, inactive = {}, {}
for i, t in ipairs(order) do
if t.val then
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
--[[
-- Check increasingly generic key combinations until we find a match. If a
-- specific category exists for the combination of key fragments we are
-- given, that match will be found first. If not, we keep trying different
-- key fragment combinations until we match using the key
-- "all-all-all-all-all".
--
-- To generate the keys, we index the key subtables using a binary matrix
-- with indexes i and j. j is only calculated up to the number of active
-- subtables. For example, if there were three active subtables, the matrix
-- would look like this, with 0 corresponding to the key fragment "all", and
-- 1 corresponding to other key fragments.
--
-- j 1 2 3
-- i
-- 1 1 1 1
-- 2 0 1 1
-- 3 1 0 1
-- 4 0 0 1
-- 5 1 1 0
-- 6 0 1 0
-- 7 1 0 0
-- 8 0 0 0
--
-- Values of j higher than the number of active subtables are set
-- to the string "all".
--
-- A key for cfg.protectionCategories is constructed for each value of i.
-- The position of the value in the key is determined by the keypos field in
-- each subtable.
--]]
local cats = cfg.protectionCategories
for i = 1, 2^noActive do
local key = {}
for j, t in ipairs(attemptOrder) do
if j > noActive then
key[t.keypos] = 'all'
else
local quotient = i / 2 ^ (j - 1)
quotient = math.ceil(quotient)
if quotient % 2 == 1 then
key[t.keypos] = t.val
else
key[t.keypos] = 'all'
end
end
end
key = table.concat(key, '|')
local attempt = cats[key]
if attempt then
return makeCategoryLink(attempt, title.text)
end
end
return ''
end
function Protection:isIncorrect()
local expiry = self.expiry
return not self:shouldHaveProtectionCategory()
or type(expiry) == 'number' and expiry < os.time()
end
function Protection:isTemplateProtectedNonTemplate()
local action, namespace = self.action, self.title.namespace
return self.level == 'templateeditor'
and (
(action ~= 'edit' and action ~= 'move')
or (namespace ~= 10 and namespace ~= 828)
)
end
function Protection:makeCategoryLinks()
local msg = self._cfg.msg
local ret = {self:makeProtectionCategory()}
if self:isIncorrect() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-incorrect'],
self.title.text
)
end
if self:isTemplateProtectedNonTemplate() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-template'],
self.title.text
)
end
return table.concat(ret)
end
--------------------------------------------------------------------------------
-- Blurb class
--------------------------------------------------------------------------------
local Blurb = {}
Blurb.__index = Blurb
Blurb.bannerTextFields = {
text = true,
explanation = true,
tooltip = true,
alt = true,
link = true
}
function Blurb.new(protectionObj, args, cfg)
return setmetatable({
_cfg = cfg,
_protectionObj = protectionObj,
_args = args
}, Blurb)
end
-- Private methods --
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
local success, date = pcall(
lang.formatDate,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. tostring(num)
)
if success then
return date
end
end
function Blurb:_getExpandedMessage(msgKey)
return self:_substituteParameters(self._cfg.msg[msgKey])
end
function Blurb:_substituteParameters(msg)
if not self._params then
local parameterFuncs = {}
parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter
parameterFuncs.EDITREQUEST = self._makeEditRequestParameter
parameterFuncs.EXPIRY = self._makeExpiryParameter
parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter
parameterFuncs.IMAGELINK = self._makeImageLinkParameter
parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter
parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter
parameterFuncs.PAGETYPE = self._makePagetypeParameter
parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter
parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter
parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter
parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter
parameterFuncs.TALKPAGE = self._makeTalkPageParameter
parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter
parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter
parameterFuncs.VANDAL = self._makeVandalTemplateParameter
self._params = setmetatable({}, {
__index = function (t, k)
local param
if parameterFuncs[k] then
param = parameterFuncs[k](self)
end
param = param or ''
t[k] = param
return param
end
})
end
msg = msg:gsub('${(%u+)}', self._params)
return msg
end
function Blurb:_makeCurrentVersionParameter()
-- A link to the page history or the move log, depending on the kind of
-- protection.
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'move' then
-- We need the move log link.
return makeFullUrl(
'Special:Log',
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
)
else
-- We need the history link.
return makeFullUrl(
pagename,
{action = 'history'},
self:_getExpandedMessage('current-version-edit-display')
)
end
end
function Blurb:_makeEditRequestParameter()
local mEditRequest = require('Module:Submit an edit request')
local action = self._protectionObj.action
local level = self._protectionObj.level
-- Get the edit request type.
local requestType
if action == 'edit' then
if level == 'autoconfirmed' then
requestType = 'semi'
elseif level == 'extendedconfirmed' then
requestType = 'extended'
elseif level == 'templateeditor' then
requestType = 'template'
end
end
requestType = requestType or 'full'
-- Get the display value.
local display = self:_getExpandedMessage('edit-request-display')
return mEditRequest._link{type = requestType, display = display}
end
function Blurb:_makeExpiryParameter()
local expiry = self._protectionObj.expiry
if type(expiry) == 'number' then
return self:_formatDate(expiry)
else
return expiry
end
end
function Blurb:_makeExplanationBlurbParameter()
-- Cover special cases first.
if self._protectionObj.title.namespace == 8 then
-- MediaWiki namespace
return self:_getExpandedMessage('explanation-blurb-nounprotect')
end
-- Get explanation blurb table keys
local action = self._protectionObj.action
local level = self._protectionObj.level
local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'
-- Find the message in the explanation blurb table and substitute any
-- parameters.
local explanations = self._cfg.explanationBlurbs
local msg
if explanations[action][level] and explanations[action][level][talkKey] then
msg = explanations[action][level][talkKey]
elseif explanations[action][level] and explanations[action][level].default then
msg = explanations[action][level].default
elseif explanations[action].default and explanations[action].default[talkKey] then
msg = explanations[action].default[talkKey]
elseif explanations[action].default and explanations[action].default.default then
msg = explanations[action].default.default
else
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
level,
talkKey
), 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeImageLinkParameter()
local imageLinks = self._cfg.imageLinks
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if imageLinks[action][level] then
msg = imageLinks[action][level]
elseif imageLinks[action].default then
msg = imageLinks[action].default
else
msg = imageLinks.edit.default
end
return self:_substituteParameters(msg)
end
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
end
end
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
end
end
function Blurb:_makePagetypeParameter()
local pagetypes = self._cfg.pagetypes
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or error('no default pagetype defined', 8)
end
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._cfg.protectionBlurbs
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionBlurbs[action][level] then
msg = protectionBlurbs[action][level]
elseif protectionBlurbs[action].default then
msg = protectionBlurbs[action].default
elseif protectionBlurbs.edit.default then
msg = protectionBlurbs.edit.default
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionDateParameter()
local protectionDate = self._protectionObj.protectionDate
if type(protectionDate) == 'number' then
return self:_formatDate(protectionDate)
else
return protectionDate
end
end
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._cfg.protectionLevels
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionLevels[action][level] then
msg = protectionLevels[action][level]
elseif protectionLevels[action].default then
msg = protectionLevels[action].default
elseif protectionLevels.edit.default then
msg = protectionLevels.edit.default
else
error('no protection level defined for protectionLevels.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionLogParameter()
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'autoreview' then
-- We need the pending changes log.
return makeFullUrl(
'Special:Log',
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
)
else
-- We need the protection log.
return makeFullUrl(
'Special:Log',
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
)
end
end
function Blurb:_makeTalkPageParameter()
return string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
self._protectionObj.title.text,
self._args.section or 'top',
self:_getExpandedMessage('talk-page-link-display')
)
end
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
end
end
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
end
end
function Blurb:_makeVandalTemplateParameter()
return mw.getCurrentFrame():expandTemplate{
title="vandal-m",
args={self._args.user or self._protectionObj.title.baseText}
}
end
-- Public methods --
function Blurb:makeBannerText(key)
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
'"%s" is not a valid banner config field',
tostring(key)
), 2)
end
-- Generate the text.
local msg = self._protectionObj.bannerConfig[key]
if type(msg) == 'string' then
return self:_substituteParameters(msg)
elseif type(msg) == 'function' then
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
error(string.format(
'bad output from banner config function with key "%s"'
.. ' (expected string, got %s)',
tostring(key),
type(msg)
), 4)
end
return self:_substituteParameters(msg)
end
end
--------------------------------------------------------------------------------
-- BannerTemplate class
--------------------------------------------------------------------------------
local BannerTemplate = {}
BannerTemplate.__index = BannerTemplate
function BannerTemplate.new(protectionObj, cfg)
local obj = {}
obj._cfg = cfg
-- Set the image filename.
local imageFilename = protectionObj.bannerConfig.image
if imageFilename then
obj._imageFilename = imageFilename
else
-- If an image filename isn't specified explicitly in the banner config,
-- generate it from the protection status and the namespace.
local action = protectionObj.action
local level = protectionObj.level
local namespace = protectionObj.title.namespace
local reason = protectionObj.reason
-- Deal with special cases first.
if (
namespace == 10
or namespace == 828
or reason and obj._cfg.indefImageReasons[reason]
)
and action == 'edit'
and level == 'sysop'
and not protectionObj:isTemporary()
then
-- Fully protected modules and templates get the special red "indef"
-- padlock.
obj._imageFilename = obj._cfg.msg['image-filename-indef']
else
-- Deal with regular protection types.
local images = obj._cfg.images
if images[action] then
if images[action][level] then
obj._imageFilename = images[action][level]
elseif images[action].default then
obj._imageFilename = images[action].default
end
end
end
end
return setmetatable(obj, BannerTemplate)
end
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._cfg.msg['image-filename-default']
or 'Transparent.gif'
return makeFileLink{
file = filename,
size = (self.imageWidth or 20) .. 'px',
alt = self._imageAlt,
link = self._imageLink,
caption = self.imageCaption
}
end
--------------------------------------------------------------------------------
-- Banner class
--------------------------------------------------------------------------------
local Banner = setmetatable({}, BannerTemplate)
Banner.__index = Banner
function Banner.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 40
obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.
obj._reasonText = blurbObj:makeBannerText('text')
obj._explanationText = blurbObj:makeBannerText('explanation')
obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.
return setmetatable(obj, Banner)
end
function Banner:__tostring()
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local mbargs = {
page = self._page,
type = 'protection',
image = self:renderImage(),
text = string.format(
"'''%s'''%s",
reasonText,
explanationText and '<br />' .. explanationText or ''
)
}
return makeMessageBox('mbox', mbargs)
end
--------------------------------------------------------------------------------
-- Padlock class
--------------------------------------------------------------------------------
local Padlock = setmetatable({}, BannerTemplate)
Padlock.__index = Padlock
function Padlock.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 20
obj.imageCaption = blurbObj:makeBannerText('tooltip')
obj._imageAlt = blurbObj:makeBannerText('alt')
obj._imageLink = blurbObj:makeBannerText('link')
obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]
or cfg.padlockIndicatorNames.default
or 'pp-default'
return setmetatable(obj, Padlock)
end
function Padlock:__tostring()
local frame = mw.getCurrentFrame()
-- The nowiki tag helps prevent whitespace at the top of articles.
return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{
name = 'indicator',
args = {name = self._indicatorName},
content = self:renderImage()
}
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- This is used for testing purposes.
return {
Protection = Protection,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Banner = Banner,
Padlock = Padlock,
}
end
function p._main(args, cfg, title)
args = args or {}
cfg = cfg or require(CONFIG_MODULE)
local protectionObj = Protection.new(args, cfg, title)
local ret = {}
-- If a page's edit protection is equally or more restrictive than its
-- protection from some other action, then don't bother displaying anything
-- for the other action (except categories).
if not yesno(args.catonly) and (protectionObj.action == 'edit' or
args.demolevel or
not getReachableNodes(
cfg.hierarchy,
protectionObj.level
)[effectiveProtectionLevel('edit', protectionObj.title)])
then
-- Initialise the blurb object
local blurbObj = Blurb.new(protectionObj, args, cfg)
-- Render the banner
if protectionObj:shouldShowLock() then
ret[#ret + 1] = tostring(
(yesno(args.small) and Padlock or Banner)
.new(protectionObj, blurbObj, cfg)
)
end
end
-- Render the categories
if yesno(args.category) ~= false then
ret[#ret + 1] = protectionObj:makeCategoryLinks()
end
return table.concat(ret)
end
function p.main(frame, cfg)
cfg = cfg or require(CONFIG_MODULE)
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
-- Find user args, and use the parent frame if we are being called from a
-- wrapper template.
getArgs = getArgs or require('Module:Arguments').getArgs
local userArgs = getArgs(frame, {
parentOnly = defaultArgs,
frameOnly = not defaultArgs
})
-- Build the args table. User-specified args overwrite default args.
local args = {}
for k, v in pairs(defaultArgs or {}) do
args[k] = v
end
for k, v in pairs(userArgs) do
args[k] = v
end
return p._main(args, cfg)
end
return p
894f0884d4c2da1ce19d385b96f59af654b0946a
Module:Italic title
828
195
550
2022-10-21T21:17:12Z
wikipedia>Legoktm
0
Replace [[Module:No globals]] with require( "strict" )
Scribunto
text/plain
-- This module implements {{italic title}}.
require('strict')
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local yesno = require('Module:Yesno')
--------------------------------------------------------------------------------
-- ItalicTitle class
--------------------------------------------------------------------------------
local ItalicTitle = {}
do
----------------------------------------------------------------------------
-- Class attributes and functions
-- Things that belong to the class are here. Things that belong to each
-- object are in the constructor.
----------------------------------------------------------------------------
-- Keys of title parts that can be italicized.
local italicizableKeys = {
namespace = true,
title = true,
dab = true,
}
----------------------------------------------------------------------------
-- ItalicTitle constructor
-- This contains all the dynamic attributes and methods.
----------------------------------------------------------------------------
function ItalicTitle.new()
local obj = {}
-- Function for checking self variable in methods.
local checkSelf = libraryUtil.makeCheckSelfFunction(
'ItalicTitle',
'obj',
obj,
'ItalicTitle object'
)
-- Checks a key is present in a lookup table.
-- Param: name - the function name.
-- Param: argId - integer position of the key in the argument list.
-- Param: key - the key.
-- Param: lookupTable - the table to look the key up in.
local function checkKey(name, argId, key, lookupTable)
if not lookupTable[key] then
error(string.format(
"bad argument #%d to '%s' ('%s' is not a valid key)",
argId,
name,
key
), 3)
end
end
-- Set up object structure.
local parsed = false
local categories = {}
local italicizedKeys = {}
local italicizedSubstrings = {}
-- Parses a title object into its namespace text, title, and
-- disambiguation text.
-- Param: options - a table of options with the following keys:
-- title - the title object to parse
-- ignoreDab - ignore any disambiguation parentheses
-- Returns the current object.
function obj:parseTitle(options)
checkSelf(self, 'parseTitle')
checkType('parseTitle', 1, options, 'table')
checkTypeForNamedArg('parseTitle', 'title', options.title, 'table')
local title = options.title
-- Title and dab text
local prefix, parentheses
if not options.ignoreDab then
prefix, parentheses = mw.ustring.match(
title.text,
'^(.+) %(([^%(%)]+)%)$'
)
end
if prefix and parentheses then
self.title = prefix
self.dab = parentheses
else
self.title = title.text
end
-- Namespace
local namespace = mw.site.namespaces[title.namespace].name
if namespace and #namespace >= 1 then
self.namespace = namespace
end
-- Register the object as having parsed a title.
parsed = true
return self
end
-- Italicizes part of the title.
-- Param: key - the key of the title part to be italicized. Possible
-- keys are contained in the italicizableKeys table.
-- Returns the current object.
function obj:italicize(key)
checkSelf(self, 'italicize')
checkType('italicize', 1, key, 'string')
checkKey('italicize', 1, key, italicizableKeys)
italicizedKeys[key] = true
return self
end
-- Un-italicizes part of the title.
-- Param: key - the key of the title part to be un-italicized. Possible
-- keys are contained in the italicizableKeys table.
-- Returns the current object.
function obj:unitalicize(key)
checkSelf(self, 'unitalicize')
checkType('unitalicize', 1, key, 'string')
checkKey('unitalicize', 1, key, italicizableKeys)
italicizedKeys[key] = nil
return self
end
-- Italicizes a substring in the title. This only affects the main part
-- of the title, not the namespace or the disambiguation text.
-- Param: s - the substring to be italicized.
-- Returns the current object.
function obj:italicizeSubstring(s)
checkSelf(self, 'italicizeSubstring')
checkType('italicizeSubstring', 1, s, 'string')
italicizedSubstrings[s] = true
return self
end
-- Un-italicizes a substring in the title. This only affects the main
-- part of the title, not the namespace or the disambiguation text.
-- Param: s - the substring to be un-italicized.
-- Returns the current object.
function obj:unitalicizeSubstring(s)
checkSelf(self, 'unitalicizeSubstring')
checkType('unitalicizeSubstring', 1, s, 'string')
italicizedSubstrings[s] = nil
return self
end
-- Renders the object into a page name. If no title has yet been parsed,
-- the current title is used.
-- Returns string
function obj:renderTitle()
checkSelf(self, 'renderTitle')
-- Italicizes a string
-- Param: s - the string to italicize
-- Returns string.
local function italicize(s)
assert(type(s) == 'string', 's was not a string')
assert(s ~= '', 's was the empty string')
return string.format('<i>%s</i>', s)
end
-- Escape characters in a string that are magic in Lua patterns.
-- Param: pattern - the pattern to escape
-- Returns string.
local function escapeMagicCharacters(s)
assert(type(s) == 'string', 's was not a string')
return s:gsub('%p', '%%%0')
end
-- If a title hasn't been parsed yet, parse the current title.
if not parsed then
self:parseTitle{title = mw.title.getCurrentTitle()}
end
-- Italicize the different parts of the title and store them in a
-- titleParts table to be joined together later.
local titleParts = {}
-- Italicize the italicizable keys.
for key in pairs(italicizableKeys) do
if self[key] then
if italicizedKeys[key] then
titleParts[key] = italicize(self[key])
else
titleParts[key] = self[key]
end
end
end
-- Italicize substrings. If there are any substrings to be
-- italicized then start from the raw title, as this overrides any
-- italicization of the main part of the title.
if next(italicizedSubstrings) then
titleParts.title = self.title
for s in pairs(italicizedSubstrings) do
local pattern = escapeMagicCharacters(s)
local italicizedTitle, nReplacements = titleParts.title:gsub(
pattern,
italicize
)
titleParts.title = italicizedTitle
-- If we didn't make any replacements then it means that we
-- have been passed a bad substring or that the page has
-- been moved to a bad title, so add a tracking category.
if nReplacements < 1 then
categories['Pages using italic title with no matching string'] = true
end
end
end
-- Assemble the title together from the parts.
local ret = ''
if titleParts.namespace then
ret = ret .. titleParts.namespace .. ':'
end
ret = ret .. titleParts.title
if titleParts.dab then
ret = ret .. ' (' .. titleParts.dab .. ')'
end
return ret
end
-- Returns an expanded DISPLAYTITLE parser function called with the
-- result of obj:renderTitle, plus any other optional arguments.
-- Returns string
function obj:renderDisplayTitle(...)
checkSelf(self, 'renderDisplayTitle')
return mw.getCurrentFrame():callParserFunction(
'DISPLAYTITLE',
self:renderTitle(),
...
)
end
-- Returns an expanded DISPLAYTITLE parser function called with the
-- result of obj:renderTitle, plus any other optional arguments, plus
-- any tracking categories.
-- Returns string
function obj:render(...)
checkSelf(self, 'render')
local ret = self:renderDisplayTitle(...)
for cat in pairs(categories) do
ret = ret .. string.format(
'[[Category:%s]]',
cat
)
end
return ret
end
return obj
end
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
local function getArgs(frame, wrapper)
assert(type(wrapper) == 'string', 'wrapper was not a string')
return require('Module:Arguments').getArgs(frame, {
wrappers = wrapper
})
end
-- Main function for {{italic title}}
function p._main(args)
checkType('_main', 1, args, 'table')
local italicTitle = ItalicTitle.new()
italicTitle:parseTitle{
title = mw.title.getCurrentTitle(),
ignoreDab = yesno(args.all, false)
}
if args.string then
italicTitle:italicizeSubstring(args.string)
else
italicTitle:italicize('title')
end
return italicTitle:render(args[1])
end
function p.main(frame)
return p._main(getArgs(frame, 'Template:Italic title'))
end
function p._dabonly(args)
return ItalicTitle.new()
:italicize('dab')
:render(args[1])
end
function p.dabonly(frame)
return p._dabonly(getArgs(frame, 'Template:Italic dab'))
end
return p
9b49016c8f526f680e9ecdaf36ec4ceafda2a2f8
Module:Nihongo
828
255
734
2022-10-22T09:05:07Z
wikipedia>WOSlinker
0
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
require('strict');
--[[--------------------------< E R R O R _ M E S S A G E S >--------------------------------------------------
error messaging; keys to this table are the template base names:
'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc
]]
local err_msg = {
['nihongo'] = 'Japanese or romaji text required',
['hanyu'] = 'Chinese or pinyin text required',
}
local err_cat = {
['nihongo'] = '[[Category:Nihongo template errors]]',
['hanyu'] = '[[Category:Hanyu template errors]]',
}
--[[--------------------------< C O N F I G U R A T I O N >----------------------------------------------------
configuration setting for the various templates. keys to this table are the template names without spacing
]]
local cfg = {
['nihongo'] = {
tag = 'ja',
system = 'hepburn',
system_link = '[[Hepburn romanization|Hepburn]]',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo3'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo krt'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo foot'] = {
tag = 'ja',
system = 'hepburn',
system_link = '[[Hepburn romanization|Hepburn]]',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['hanyu'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu3'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu hrt'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu foot'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
}
--[[--------------------------< E R R O R _ M E S S A G E >----------------------------------------------------
Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese>
or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors
]]
local function error_message (template)
local msg = {'<span class="error" style="font-size:100%">error: {{'};
table.insert (msg, template);
table.insert (msg, '}}: ');
table.insert (msg, cfg[template].err_msg);
table.insert (msg, ' ([[Template:');
table.insert (msg, template);
table.insert (msg, '|help]])</span>');
if 0 == mw.title.getCurrentTitle().namespace then
table.insert (msg, cfg[template].err_cat);
end
return table.concat (msg);
end
--[[--------------------------< R E N D E R E R >--------------------------------------------------------------
Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{}
from set/unset parameters:
args[1] (english text) has a value of 8 (set) or 0 (unset)
args[2] (native text) has a value of 4
args[3] (romanized text) has a value of 2
args[4] (extra) has a value of 1
index, the sum of these values, gets the appropriate format string from formatting{} table with associated values
from the formatting[index][2] table
]]
local function renderer (args, formatting, extra2)
local output;
local index = 0; -- index into formatting{}
local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1)
for i=1, 5 do -- spin through args[1] – args[4]
index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{}
end
output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil;
if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{}
output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced
end -- (nihongo and nihongo3) or removed (nihongo foot)
return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close
end
--[[--------------------------< R O M A N I Z E D _ K E R N >--------------------------------------------------
Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis
In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses
(<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>)
<ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced)
<romanized> is the return from lang_module._transl() so is not wrapped in parentheses
]]
local function romanized_kern (ret_string, romanized)
if not romanized or ('' == romanized) then -- if romanized not set
return ret_string; -- then we're done
end
local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags
romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters
local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else
local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else
local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis
local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis
local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture
local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture
if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then
ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned
end
if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then
ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned
end
return ret_string; -- done
end
--[[--------------------------< C O M M O N >------------------------------------------------------------------
Common support for {{nihongo}} and {{hanyu}}
render order: is translated (English), native, romanized
<template> is used to select the appropriate cfg table
]]
local function common (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized)
{'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized)
{'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >----------
Common support for {{nihongo3}} and {{hanyu3}}
render order: is romanized, native, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_romanized_native_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english)
{'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >----------
Common support for {{nihongo krt}} and {{hanyu krt}}
render order: is native, romanized, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_native_romanized_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>%s', {native}}, -- 4 - native
{'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra)
{'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized)
{'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english)
{'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra)
{'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english)
{'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ F O O T >--------------------------------------------------------
Common support for {{nihongo foot}} and {{hanyu foot}}
render order: is English<ref>native, romanized</ref>
<template> is used to select the appropriate cfg table
]]
local function common_foot (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local post = args[6] or args.post;
local group = args.group;
local ref_name = args.ref_name
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = {
{'%s', {extra}}, -- 1 - extra
{'%s', {romanized}}, -- 2 - romanized
{'%s, %s', {romanized, extra}}, -- 3 - romanized, extra
{'%s', {native}}, -- 4 - native
{'%s, %s', {native, extra}}, -- 5 - native, extra
{'%s, %s', {native, romanized}}, -- 6 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra
-- from here english is used in the mapping but not rendered by renderer so not included in the table
{'', {''}}, -- 8 - english
{'%s', {extra}}, -- 9 - extra
{'%s', {romanized}}, -- 10 - romanized
{'%s, %s', {romanized, extra}}, -- 11 - romanized, extra
{'%s', {native}}, -- 12 - native
{'%s, %s', {native, extra}}, -- 13 - native, extra
{'%s, %s', {native, romanized}}, -- 14 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra
}
if english and post then -- rewrite english to include |post=
english = english .. post; -- if english has a value append post else just post
elseif post then
english = post; -- english not set, use post
elseif not english then -- neither are set
english = ''; -- make english an empty string for concatenation
end
if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty)
local content = renderer (args, formatting, extra2);
content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template
return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag
else
return english; -- nothing to be inside ref tag so just return english
end
end
--[=[-------------------------< N I H O N G O >----------------------------------------------------------------
Implement {{nihongo}} using Module:Lang for language and transliteration markup
{{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function nihongo (frame)
return common (frame, 'nihongo')
end
--[=[-------------------------< N I H O N G O 3 >--------------------------------------------------------------
Implement {{nihongo3}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo3 (frame)
return common_romanized_native_translated (frame, 'nihongo3')
end
--[=[-------------------------< N I H O N G O _ K R T >--------------------------------------------------------
Implement {{nihongo krt}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo_krt (frame)
return common_native_romanized_translated (frame, 'nihongo krt')
end
--[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------
Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup
{{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function nihongo_foot (frame)
return common_foot (frame, 'nihongo foot')
end
--[=[-------------------------< H A N Y U >--------------------------------------------------------------------
Implement {{hanyu}} using Module:Lang for language and transliteration markup
{{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function hanyu (frame)
return common (frame, 'hanyu')
end
--[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------
Implement {{hanyu3}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu3 (frame)
return common_romanized_native_translated (frame, 'hanyu3')
end
--[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------
Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu_hrt (frame)
return common_native_romanized_translated (frame, 'hanyu hrt')
end
--[=[-------------------------< H A N Y U _ F O O T >----------------------------------------------------------
Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup
{{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function hanyu_foot (frame)
return common_foot (frame, 'hanyu foot')
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
nihongo = nihongo,
nihongo3 = nihongo3,
nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line
nihongo_krt = nihongo_krt,
nihongo_foot = nihongo_foot,
hanyu = hanyu,
hanyu3 = hanyu3,
hanyu_hrt = hanyu_hrt,
hanyu_foot = hanyu_foot,
}
7ad11952c5404f68ef3dc04de743da59f35238c9
Module:Section link
828
149
345
2022-10-22T09:09:53Z
wikipedia>WOSlinker
0
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
-- This module implements {{section link}}.
require('strict');
local checkType = require('libraryUtil').checkType
local p = {}
local function makeSectionLink(page, section, display)
display = display or section
page = page or ''
-- MediaWiki doesn't allow these in `page`, so only need to do for `section`
if type(section) == 'string' then
section = string.gsub(section, "{", "{")
section = string.gsub(section, "}", "}")
end
return string.format('[[%s#%s|%s]]', page, section, display)
end
local function normalizeTitle(title)
title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '')
title = mw.ustring.gsub(title, "%b<>", "")
return mw.title.new(title).prefixedText
end
function p._main(page, sections, options, title)
-- Validate input.
checkType('_main', 1, page, 'string', true)
checkType('_main', 3, options, 'table', true)
if sections == nil then
sections = {}
elseif type(sections) == 'string' then
sections = {sections}
elseif type(sections) ~= 'table' then
error(string.format(
"type error in argument #2 to '_main' " ..
"(string, table or nil expected, got %s)",
type(sections)
), 2)
end
options = options or {}
title = title or mw.title.getCurrentTitle()
-- Deal with blank page names elegantly
if page and not page:find('%S') then
page = nil
options.nopage = true
end
-- Make the link(s).
local isShowingPage = not options.nopage
if #sections <= 1 then
local linkPage = page or ''
local section = sections[1] or 'Notes'
local display = '§ ' .. section
if isShowingPage then
page = page or title.prefixedText
if options.display and options.display ~= '' then
if normalizeTitle(options.display) == normalizeTitle(page) then
display = options.display .. ' ' .. display
else
error(string.format(
'Display title "%s" was ignored since it is ' ..
"not equivalent to the page's actual title",
options.display
), 0)
end
else
display = page .. ' ' .. display
end
end
return makeSectionLink(linkPage, section, display)
else
-- Multiple sections. First, make a list of the links to display.
local ret = {}
for i, section in ipairs(sections) do
ret[i] = makeSectionLink(page, section)
end
-- Assemble the list of links into a string with mw.text.listToText.
-- We use the default separator for mw.text.listToText, but a custom
-- conjunction. There is also a special case conjunction if we only
-- have two links.
local conjunction
if #sections == 2 then
conjunction = '​ and '
else
conjunction = ', and '
end
ret = mw.text.listToText(ret, nil, conjunction)
-- Add the intro text.
local intro = '§§ '
if isShowingPage then
intro = (page or title.prefixedText) .. ' ' .. intro
end
ret = intro .. ret
return ret
end
end
function p.main(frame)
local yesno = require('Module:Yesno')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Section link',
valueFunc = function (key, value)
value = value:match('^%s*(.-)%s*$') -- Trim whitespace
-- Allow blank first parameters, as the wikitext template does this.
if value ~= '' or key == 1 then
return value
end
end
})
for k, v in pairs(args) do -- replace underscores in the positional parameter values
if 'number' == type(k) then
if not yesno (args['keep-underscores']) then -- unless |keep-underscores=yes
args[k] = mw.uri.decode (v, 'WIKI'); -- percent-decode; replace underscores with space characters
else
args[k] = mw.uri.decode (v, 'PATH'); -- percent-decode; retain underscores
end
end
end
-- Sort the arguments.
local page
local sections, options = {}, {}
for k, v in pairs(args) do
if k == 1 then
-- Doing this in the loop because of a bug in [[Module:Arguments]]
-- when using pairs with deleted arguments.
page = mw.text.decode(v, true)
elseif type(k) == 'number' then
sections[k] = v
else
options[k] = v
end
end
options.nopage = yesno (options.nopage); -- make boolean
-- Extract section from page, if present
if page then
local p, s = page:match('^(.-)#(.*)$')
if p then page, sections[1] = p, s end
end
-- Compress the sections array.
local function compressArray(t)
local nums, ret = {}, {}
for num in pairs(t) do
nums[#nums + 1] = num
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
sections = compressArray(sections)
return p._main(page, sections, options)
end
return p
5cc61d43dc601ca43e9472500fc5cd09ca7cea44
Module:Message box
828
11
140
2022-10-23T04:26:44Z
wikipedia>Legoktm
0
Replace [[Module:No globals]] with require( "strict" )
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
bdb0ecc9f26f26b9c0ce12a066a183ac9d4f0705
Module:Tmpl
828
416
1267
2022-10-23T14:49:59Z
mw>WOSlinker
0
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
-- This is a helper module for {{tmpl}}
require('strict')
-- The trailing `[^0-9]?` ensures that `$10` doesn't potentially change
-- from being treated as `${1}0` to being treated as `${10}`
-- if the number of supported parameters is ever expanded:
local PATTERN = "%$([1-9])[^0-9]?"
local this = {}
function this.renderTmpl(frame)
local args = frame.args
local pargs = (frame:getParent() or {}).args
local input = pargs[0] or ''
local result = {}
local prevPos = 1
do
local startPos, _, k
while true do
startPos, _, k = string.find(input, PATTERN, prevPos)
if (not startPos) then break end
table.insert(result, string.sub(input, prevPos, startPos - 1))
local n = tonumber(k)
local r = pargs[n]
if (r) then
table.insert(result, r)
else
table.insert(result, '$' .. n)
end
prevPos = startPos + #k + 1
end
end
table.insert(result, string.sub(input, prevPos))
return table.concat(result)
end
return this
a44958c165a7b935145f1c840d1ec428886bf193
Template:Nihongo/doc
10
263
750
2022-10-23T19:43:23Z
wikipedia>Mx. Granger
0
removing - will be deleted
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). -->
{{High-use}}
{{COinS safe|n}}
{{Lua|Module:Nihongo}}
{{TOCright}}
== Usage ==
This template marks the <code>[[kanji]]</code> segment as being in Japanese kanji and/or kana, which helps user agents (web browsers and so on) to display it correctly.
{{details|topic=when to use this template|Wikipedia:Manual of Style (Japan-related articles)}}
'''Syntax:'''
{|class=wikitable
|Without lead=yes
|With lead=yes
|-
|<code><nowiki>{{Nihongo|</nowiki><{{var|english}}>|<{{var|kanji/kana}}>|<{{var|rōmaji}}>|<{{var|extra}}>|<{{var|extra2}}>}}</code>
|<code><nowiki>{{Nihongo|</nowiki><{{var|english}}>|<{{var|kanji/kana}}>|<{{var|rōmaji}}>|lead=yes|extra=<{{var|extra}}>|extra2=<{{var|extra2}}>}}</code>
|}
'''Parameters:'''
* <{{var|english}}>. Optional. The word as translated into English. Note that this will sometimes be the actual Japanese word due to it being adopted into English.
* <{{var|kanji/kana}}>. Required when <{{var|rōmaji}}> is empty or omitted. The word as written using Japanese script (kanji, kana).
* <{{var|rōmaji}}>. Required when <{{var|kanji/kana}}> is empty. Transliteration of the Japanese word, using Hepburn Romanization.
* lead=yes. Optional. This should be used for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing.
* <{{var|extra}}>. Optional. Can be used to add a gloss (particularly if there is no English form). Can also be expressed as a named parameter, <code>extra=</code>
* <{{var|extra2}}>. Optional. Can also be expressed as a named parameter, <code>extra2=</code>. It is only useful in ";" definitions (extra2 will be displayed without bold, whereas text following the template will get the bold).
=== Examples ===
;Regular use:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}}
|}
;Use in lead:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}}
|}
;Without <code>English</code>:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā}}
|}
;Without <code>English</code>, use in lead:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā|lead=yes}}
|}
;With <code>extra</code> to add a literal translation:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}}
|}
;With <code>extra2</code>:
{| CLASS="wikitable"
|'''Code''' ||
<code><nowiki>; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}}</nowiki></code><BR />
<code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code>
|-
|'''Gives'''||
; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}}
: Mendicant priest of the Fuke sect of Zen Buddhism.
|}
{{hatnote|Note: literal translations and linguistic glosses go in [[MOS:SINGLE|single quotation marks]], not double.}}
;Without <code>extra2</code>:
{| CLASS="wikitable"
|'''Code''' ||
<code><nowiki>; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness'</nowiki></code><BR />
<code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code>
|-
|'''Gives'''||
<!-- -->; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness'
<!-- -->: Mendicant priest of the Fuke sect of Zen Buddhism.
|}
=== User style ===
[[Help:User style|User style]] can be set by adding code similar to
<syntaxhighlight lang="css">
@media screen, tv {
*[lang="ja"] {
color: green;
}
}</syntaxhighlight>
to [[Special:Mypage/common.css|common.css]].
==Error messaging==
This template emits one error message of its own:
:<span class="error" style="font-size:100%">error: <nowiki>{{nihongo}}</nowiki>: Japanese or romaji text required</span>
One of the positional parameters <code><{{var|kanji/kana}}></code> (<code><nowiki>{{{2}}}</nowiki></code>), the 'Japanese' referred to in the error message or <code><{{var|rōmaji}}></code> (<code><nowiki>{{{3}}}</nowiki></code>) is required for proper operation of this template. Articles with these errors are collected in {{clc|Nihongo template errors}}.
This error often occurs because the template is malformed:
:<code><nowiki>{{Nihongo|東京タワー}}</nowiki></code> instead of <code><nowiki>{{Nihongo||東京タワー}}</nowiki></code>; {{lang|ja|東京タワー}} is in <code><nowiki>{{{1}}}</nowiki></code> (<code><{{var|english}}></code>) instead of <code><nowiki>{{{2}}}</nowiki></code> (<code><{{var|kanji/kana}}></code>). To resolve this error, add the missing pipe (<code>|</code>) or consider using {{tlx|lang}} or {{tlx|transl}}
Because this template uses {{tld|lang}} and {{tlx|transl}} which emit their own error messages, see the help text for those at:
:{{cl|Lang and lang-xx template errors}} – for error messages emitted by {{tld|lang}}
:{{cl|Transl template errors}} – for error messages emitted by {{tld|transl}}
==Limitations==
This cannot be used within a Wikilink in an article or in any template or other page that is [[WP:Transclusion|transcluded]] into an article.
== See also ==
* {{tlp|Lang-ja|...}},{{tlp|lang|ja|...}}, similar templates in the [[:Category:Lang-x templates|Lang-x template]] for marking up Japanese text
* {{tl|Nihongo3}}, essentially the same as this template, but gives rōmaji first and English inside the parentheses
* {{tl|Nihongo krt}}, essentially the same as this template, but gives kanji first with rōmaji and English inside the parentheses
* {{tl|Nihongo foot}}, same as this version, but puts everything but the English into a footnote
* {{tl|Nihongo2}}, also displays the kanji properly, but without adding anything in parentheses, without rōmaji and without the extra parameters
* {{tlp|in lang|ja}}, to label sources written in Japanese
* {{tl|Japanese}}, to request expert assistance with Japanese script
== Template data ==
{{TemplateDataHeader}}
<templatedata>
{
"description": "This template is used to display Japanese text, applying the correct code and formatting.",
"params": {
"1": {
"label": "English text",
"type": "string",
"description": "The word as translated into English. Note this will sometimes be the actual Japanese word if it has been adopted into English."
},
"2": {
"label": "Kanji/kana text",
"type": "string",
"required": true,
"description": "The word as written in Japanese (kanji, kana, Roman letters, and possibly other marks)."
},
"3": {
"label": "Romanized (rōmaji) text",
"type": "string",
"description": "Transliteration of the Japanese word, using Hepburn Romanization."
},
"4": {
"label": "Extra text inside parentheses",
"type": "string",
"description": "Adds extra text inside the parentheses. ",
"aliases": [
"extra"
]
},
"5": {
"label": "Extra text outside parentheses",
"type": "string",
"description": "Adds extra text outside the parentheses. It is only useful in \";\" definitions (it will be displayed without bold, whereas text following the template, will be bolded). Literal translations and linguistic glosses must use single quotation marks, not double.",
"aliases": [
"extra2"
]
},
"lead": {
"label": "Lead formatting",
"type": "string",
"description": "If set to yes, changes formatting style for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing.",
"suggestedvalues": [
"yes"
]
}
},
"paramOrder": [
"1",
"2",
"3",
"lead",
"4",
"5"
],
"format": "inline"
}
</templatedata>
<includeonly>{{Sandbox other||
<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Japonic multilingual support templates|{{PAGENAME}}]]
[[Category:WikiProject Japan templates|Nihongo]]
}}</includeonly>
03b074eb3b2d0663c7e41ac1fa436fb26704810f
Module:Yesno
828
12
391
132
2022-10-28T05:41:15Z
meta>Agent Isai
0
1 revision imported from [[:metawikimedia:Module:Yesno]]: Required for local usage
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
Module:Arguments
828
13
393
134
2022-10-28T05:41:15Z
meta>Agent Isai
0
1 revision imported from [[:metawikimedia:Module:Arguments]]: Required for local usage
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Module:No globals
828
168
397
2022-10-28T05:42:58Z
meta>Agent Isai
0
1 revision imported from [[:metawikimedia:Module:No_globals]]: Required for local usage
Scribunto
text/plain
local mt = getmetatable(_G) or {}
function mt.__index (t, k)
if k ~= 'arg' then
-- perf optimization here and below: do not load Module:TNT unless there is an error
error(require('Module:TNT').format('I18n/No globals', 'err-read', tostring(k)), 2)
end
return nil
end
function mt.__newindex(t, k, v)
if k ~= 'arg' then
error(require('Module:TNT').format('I18n/No globals', 'err-write', tostring(k)), 2)
end
rawset(t, k, v)
end
setmetatable(_G, mt)
efcb47c74e7e2bb9a4ad8764d99a0afce8fed410
Template:Documentation
10
15
389
238
2022-11-09T19:51:20Z
meta>Agent Isai
0
1 revision imported from [[:wikipedia:Template:Documentation]]: Importing from [[w:|English Wikipedia]] to sync templates
wikitext
text/x-wiki
{{#invoke:Documentation|main}}
bb08b6773a4c1e1d528cefda2d7c305d8b5193ec
Module:Documentation
828
25
399
240
2022-11-09T19:51:21Z
meta>Agent Isai
0
1 revision imported from [[:wikipedia:Module:Documentation]]: Importing from [[w:|English Wikipedia]] to sync templates
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local i18n = mw.loadData('Module:Documentation/i18n')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4)
end
local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
return ret
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
return '<small>(' .. table.concat(ret, ' | ') .. ')</small>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Load TemplateStyles
----------------------------------------------------------------------------
p.main = function(frame)
local parent = frame.getParent(frame)
local output = p._main(parent.args)
return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output
end
----------------------------------------------------------------------------
-- Main function
----------------------------------------------------------------------------
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--
-- Messages:
-- 'main-div-id' --> 'template-documentation'
-- 'main-div-classes' --> 'template-documentation iezoomfix'
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
-- This div tag is from {{documentation/start box}}, but moving it here
-- so that we don't have to worry about unclosed tags.
:tag('div')
:attr('id', message('main-div-id'))
:addClass(message('main-div-class'))
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:done()
:wikitext(p._endBox(args, env))
:wikitext(p.addTrackingCategories(env))
return tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title objects and other namespace- or
-- path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
-- env.printTitle - the print version of the template, located at the /Print subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.printTitle()
--[[
-- Title object for the /Print subpage.
-- Messages:
-- 'print-subpage' --> 'Print'
--]]
return env.templateTitle:subPageTitle(message('print-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the same as the
-- subject namespace. However, pages in the Article, File, MediaWiki or Category
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local frame = mw.getCurrentFrame()
local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed.
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if isPreviewing or not compareUrl then
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
else
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
text = text .. makeCategoryLink(message('sandbox-category'))
omargs.text = text
omargs.class = message('sandbox-class')
return messageBox.main('ombox', omargs)
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local title = env.title
local protectionLevels
local protectionTemplate = message('protection-template')
local namespace = title.namespace
if not (protectionTemplate and (namespace == 10 or namespace == 828)) then
-- Don't display the protection template if we are not in the template or module namespaces.
return nil
end
protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editLevels = protectionLevels.edit
local moveLevels = protectionLevels.move
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then
-- The page is full-move protected, or full, template, or semi-protected.
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = i18n['view-link-display']
data.editLinkDisplay = i18n['edit-link-display']
data.historyLinkDisplay = i18n['history-link-display']
data.purgeLinkDisplay = i18n['purge-link-display']
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 6 then -- File namespace
preload = message('file-docpage-preload')
elseif subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = i18n['create-link-display']
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
return s
:gsub('%[', '[') -- Replace square brackets with HTML entities.
:gsub('%]', ']')
end
local ret
local docTitle = data.docTitle
local title = data.title
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
-- 'start-box-link-id' --> 'doc_editlinks'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = i18n['template-namespace-heading']
elseif subjectSpace == 828 then -- Module namespace
data.heading = i18n['module-namespace-heading']
elseif subjectSpace == 6 then -- File namespace
data.heading = i18n['file-namespace-heading']
else
data.heading = i18n['other-namespaces-heading']
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
data.linksClass = message('start-box-linkclasses')
data.linksId = message('start-box-link-id')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
:addClass(message('header-div-class'))
:tag('div')
:addClass(message('heading-div-class'))
:wikitext(data.heading)
local links = data.links
if links then
sbox
:tag('div')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
local cbox = mw.html.create('div')
cbox
:addClass(message('content-div-class'))
:wikitext('\n' .. (content or '') .. '\n')
return tostring(cbox)
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the footer text field.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '')
text = text .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.
if printBlurb then
text = text .. '<br />' .. printBlurb
end
end
end
local ebox = mw.html.create('div')
ebox
:addClass(message('footer-div-class'))
:wikitext(text)
return tostring(ebox)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[w:Wikipedia:Template documentation|documentation]]
-- is [[w:Wikipedia:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle or args.content then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = i18n['edit-link-display']
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = i18n['history-link-display']
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = i18n['create-link-display']
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
function p.makePrintBlurb(args, env)
--[=[
-- Generates the blurb displayed when there is a print version of the template available.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'print-link-display' --> '/Print'
-- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]'
-- .. ' of this template exists at $1.'
-- .. ' If you make a change to this template, please update the print version as well.'
-- 'display-print-category' --> true
-- 'print-category' --> 'Templates with print versions'
--]=]
local printTitle = env.printTitle
if not printTitle then
return nil
end
local ret
if printTitle.exists then
local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))
ret = message('print-blurb', {printLink})
local displayPrintCategory = message('display-print-category', nil, 'boolean')
if displayPrintCategory then
ret = ret .. makeCategoryLink(message('print-category'))
end
end
return ret
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
a029650bff998bd1a25784b49e99f984f068d85d
49
2023-02-14T16:27:01Z
mw>Uzume
0
cherry pick Module wikitext support from [[w:en:Module:Documentation]]
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local i18n = mw.loadData('Module:Documentation/i18n')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4)
end
local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
return ret
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Load TemplateStyles
----------------------------------------------------------------------------
p.main = function(frame)
local parent = frame.getParent(frame)
local output = p._main(parent.args)
return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output
end
----------------------------------------------------------------------------
-- Main function
----------------------------------------------------------------------------
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--
-- Messages:
-- 'main-div-id' --> 'template-documentation'
-- 'main-div-classes' --> 'template-documentation iezoomfix'
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
-- This div tag is from {{documentation/start box}}, but moving it here
-- so that we don't have to worry about unclosed tags.
:tag('div')
:attr('id', message('main-div-id'))
:addClass(message('main-div-class'))
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:done()
:wikitext(p._endBox(args, env))
:wikitext(p.addTrackingCategories(env))
return tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title objects and other namespace- or
-- path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
-- env.printTitle - the print version of the template, located at the /Print subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.printTitle()
--[[
-- Title object for the /Print subpage.
-- Messages:
-- 'print-subpage' --> 'Print'
--]]
return env.templateTitle:subPageTitle(message('print-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the same as the
-- subject namespace. However, pages in the Article, File, MediaWiki or Category
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local frame = mw.getCurrentFrame()
local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed.
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if isPreviewing or not compareUrl then
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
else
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
text = text .. makeCategoryLink(message('sandbox-category'))
omargs.text = text
omargs.class = message('sandbox-class')
local ret = '<div style="clear: both;"></div>'
ret = ret .. messageBox.main('ombox', omargs)
return ret
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local title = env.title
local protectionLevels
local protectionTemplate = message('protection-template')
local namespace = title.namespace
if not (protectionTemplate and (namespace == 10 or namespace == 828)) then
-- Don't display the protection template if we are not in the template or module namespaces.
return nil
end
protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editLevels = protectionLevels.edit
local moveLevels = protectionLevels.move
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then
-- The page is full-move protected, or full, template, or semi-protected.
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = i18n['view-link-display']
data.editLinkDisplay = i18n['edit-link-display']
data.historyLinkDisplay = i18n['history-link-display']
data.purgeLinkDisplay = i18n['purge-link-display']
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 6 then -- File namespace
preload = message('file-docpage-preload')
elseif subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = i18n['create-link-display']
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities.
s = s:gsub('%]', ']')
return s
end
local ret
local docTitle = data.docTitle
local title = data.title
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
-- 'start-box-link-id' --> 'doc_editlinks'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = i18n['template-namespace-heading']
elseif subjectSpace == 828 then -- Module namespace
data.heading = i18n['module-namespace-heading']
elseif subjectSpace == 6 then -- File namespace
data.heading = i18n['file-namespace-heading']
else
data.heading = i18n['other-namespaces-heading']
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
data.linksClass = message('start-box-linkclasses')
data.linksId = message('start-box-link-id')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
:addClass(message('header-div-class'))
:tag('div')
:addClass(message('heading-div-class'))
:wikitext(data.heading)
local links = data.links
if links then
sbox
:tag('div')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
local cbox = mw.html.create('div')
cbox
:addClass(message('content-div-class'))
:wikitext('\n' .. (content or '') .. '\n')
return tostring(cbox)
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the footer text field.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '')
text = text .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.
if printBlurb then
text = text .. '<br />' .. printBlurb
end
end
end
local ebox = mw.html.create('div')
ebox
:addClass(message('footer-div-class'))
:wikitext(text)
return tostring(ebox)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[w:Wikipedia:Template documentation|documentation]]
-- is [[w:Wikipedia:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle or args.content then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = i18n['edit-link-display']
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = i18n['history-link-display']
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = i18n['create-link-display']
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
function p.makePrintBlurb(args, env)
--[=[
-- Generates the blurb displayed when there is a print version of the template available.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'print-link-display' --> '/Print'
-- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]'
-- .. ' of this template exists at $1.'
-- .. ' If you make a change to this template, please update the print version as well.'
-- 'display-print-category' --> true
-- 'print-category' --> 'Templates with print versions'
--]=]
local printTitle = env.printTitle
if not printTitle then
return nil
end
local ret
if printTitle.exists then
local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))
ret = message('print-blurb', {printLink})
local displayPrintCategory = message('display-print-category', nil, 'boolean')
if displayPrintCategory then
ret = ret .. makeCategoryLink(message('print-category'))
end
end
return ret
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
0e23eec0d3c20c23afcd28849e240b9083dbcf88
Module:Documentation/config
828
26
401
242
2022-11-09T19:51:21Z
meta>Agent Isai
0
1 revision imported from [[:wikipedia:Module:Documentation/config]]: Importing from [[w:|English Wikipedia]] to sync templates
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local _format = require('Module:TNT').format
local function format(id)
return _format('I18n/Documentation', id)
end
local cfg = {} -- Do not edit this line.
cfg['templatestyles-scr'] = 'Module:Documentation/styles.css'
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-template']
-- The name of the template that displays the protection icon (a padlock on enwiki).
cfg['protection-template'] = 'PP-template'
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
-- cfg['protection-template-args']
-- Any arguments to send to the protection template. This should be a Lua table.
-- For example, if the protection template is "pp-template", and the wikitext template invocation
-- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}".
--]]
cfg['protection-template-args'] = {docusage = 'yes'}
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template')
cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module')
cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other')
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb')
cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb')
cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display')
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb')
cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display')
cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb')
cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display')
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = format('transcluded-from-blurb')
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = format('create-module-doc-blurb')
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = format('experiment-blurb-template')
cfg['experiment-blurb-module'] = format('experiment-blurb-module')
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = format('sandbox-link-display')
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display')
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = format('sandbox-create-link-display')
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = format('compare-link-display')
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = format('mirror-link-display')
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = format('testcases-link-display')
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = format('testcases-edit-link-display')
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = format('testcases-create-link-display')
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = format('add-categories-blurb')
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = format('subpages-blurb')
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = format('subpages-link-display')
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = format('template-pagetype')
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = format('module-pagetype')
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = format('default-pagetype')
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['file-docpage-preload']
-- Preload file for documentation page in the file namespace.
cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- Print version configuration
----------------------------------------------------------------------------------------------------
-- cfg['print-subpage']
-- The name of the template subpage used for print versions.
cfg['print-subpage'] = 'Print'
-- cfg['print-link-display']
-- The text to display when linking to the /Print subpage.
cfg['print-link-display'] = '/Print'
-- cfg['print-blurb']
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display'].
cfg['print-blurb'] = format('print-blurb')
-- cfg['display-print-category']
-- Set to true to enable output of cfg['print-category'] if a /Print subpage exists.
-- This should be a boolean value (either true or false).
cfg['display-print-category'] = true
-- cfg['print-category']
-- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists.
cfg['print-category'] = 'Templates with print versions'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['main-div-id']
-- The "id" attribute of the main HTML "div" tag.
cfg['main-div-id'] = 'template-documentation'
-- cfg['main-div-classes']
-- The CSS classes added to the main HTML "div" tag.
cfg['main-div-class'] = 'ts-doc-doc'
cfg['header-div-class'] = 'ts-doc-header'
cfg['heading-div-class'] = 'ts-doc-heading'
cfg['content-div-class'] = 'ts-doc-content'
cfg['footer-div-class'] = 'ts-doc-footer plainlinks'
cfg['sandbox-class'] = 'ts-doc-sandbox'
-- cfg['start-box-linkclasses']
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.
cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks'
-- cfg['start-box-link-id']
-- The HTML "id" attribute for the links in the start box.
cfg['start-box-link-id'] = 'doc_editlinks'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
79bc957b39b5b752fa4c2e2e80a35faa01901425
51
2023-03-11T18:43:06Z
mw>Pppery
0
Disable a silly category
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local _format = require('Module:TNT').format
local function format(id)
return _format('I18n/Documentation', id)
end
local cfg = {} -- Do not edit this line.
cfg['templatestyles-scr'] = 'Module:Documentation/styles.css'
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-template']
-- The name of the template that displays the protection icon (a padlock on enwiki).
cfg['protection-template'] = 'pp-template'
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
-- cfg['protection-template-args']
-- Any arguments to send to the protection template. This should be a Lua table.
-- For example, if the protection template is "pp-template", and the wikitext template invocation
-- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}".
--]]
cfg['protection-template-args'] = {docusage = 'yes'}
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template')
cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module')
cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other')
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb')
cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb')
cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display')
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb')
cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display')
cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb')
cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display')
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = format('transcluded-from-blurb')
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = format('create-module-doc-blurb')
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = format('experiment-blurb-template')
cfg['experiment-blurb-module'] = format('experiment-blurb-module')
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = format('sandbox-link-display')
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display')
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = format('sandbox-create-link-display')
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = format('compare-link-display')
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = format('mirror-link-display')
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = format('testcases-link-display')
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = format('testcases-edit-link-display')
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = format('testcases-create-link-display')
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = format('add-categories-blurb')
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = format('subpages-blurb')
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = format('subpages-link-display')
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = format('template-pagetype')
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = format('module-pagetype')
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = format('default-pagetype')
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['file-docpage-preload']
-- Preload file for documentation page in the file namespace.
cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- Print version configuration
----------------------------------------------------------------------------------------------------
-- cfg['print-subpage']
-- The name of the template subpage used for print versions.
cfg['print-subpage'] = 'Print'
-- cfg['print-link-display']
-- The text to display when linking to the /Print subpage.
cfg['print-link-display'] = '/Print'
-- cfg['print-blurb']
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display'].
cfg['print-blurb'] = format('print-blurb')
-- cfg['display-print-category']
-- Set to true to enable output of cfg['print-category'] if a /Print subpage exists.
-- This should be a boolean value (either true or false).
cfg['display-print-category'] = true
-- cfg['print-category']
-- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists.
cfg['print-category'] = 'Templates with print versions'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['main-div-id']
-- The "id" attribute of the main HTML "div" tag.
cfg['main-div-id'] = 'template-documentation'
-- cfg['main-div-classes']
-- The CSS classes added to the main HTML "div" tag.
cfg['main-div-class'] = 'ts-doc-doc'
cfg['header-div-class'] = 'ts-doc-header'
cfg['heading-div-class'] = 'ts-doc-heading'
cfg['content-div-class'] = 'ts-doc-content'
cfg['footer-div-class'] = 'ts-doc-footer plainlinks'
cfg['sandbox-class'] = 'ts-doc-sandbox'
-- cfg['start-box-linkclasses']
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.
cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks'
-- cfg['start-box-link-id']
-- The HTML "id" attribute for the links in the start box.
cfg['start-box-link-id'] = 'doc_editlinks'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = false
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
224f3664a83268936f1b9935eafc0055a97071ac
Module:Message box
828
11
395
140
2022-11-09T19:55:49Z
meta>Agent Isai
0
Fix
Scribunto
text/plain
require('Module:No globals')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
fd6a8b1a0ac5916465cdf2eb099825f1d006cfba
21
2023-03-11T18:31:56Z
mw>Pppery
0
-
Scribunto
text/plain
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
fcf2586b774e6db72e0a2837019f5b445124ddc4
Template:Literal translation
10
232
688
2022-11-12T17:32:00Z
wikipedia>Est. 2021
0
as per talk, for consistency with lang-xx templates; tested in sandbox and testcases
wikitext
text/x-wiki
{{#if:{{{sortable|}}}
|<span style="display:none;">{{{1|}}}</span>
}}{{#if:{{{i|}}}
|<nowiki/>''
}}{{abbr|style=font-size:85%|{{#switch:{{{lk|}}}
|yes|on = [[Literal translation|lit.]]
|#default = lit.
}}|literal translation}}{{#if:{{{i|}}}
|''<nowiki/>
}}{{#if:{{{1|}}}
| {{thinsp}}<nowiki>'</nowiki>{{{1}}}{{#if:{{str endswith|{{{1}}}|''}}|{{'}}|'}}
}}{{#if:{{{2|}}}
| {{sp}} or <nowiki>'</nowiki>{{{2}}}{{#if:{{str endswith|{{{2}}}|''}}|{{'}}|'}}
}}{{#if:{{{3|}}}
| {{sp}} or <nowiki>'</nowiki>{{{3}}}{{#if:{{str endswith|{{{3}}}|''}}|{{'}}|'}}
}}{{#if:{{{4|}}}
| {{sp}} or <nowiki>'</nowiki>{{{4}}}{{#if:{{str endswith|{{{4}}}|''}}|{{'}}|'}}
}}<noinclude>
{{Documentation}}
</noinclude>
1a7e9904a6e7bb60117c687c5c373fb9cf76c44c
Module:Uses TemplateStyles
828
29
57
2022-11-19T16:11:44Z
mw>Waldyrious
0
fix interwiki link
Scribunto
text/plain
-- This module implements the {{Uses TemplateStyles}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')
local p = {}
local function format(msg, ...)
-- Content sourced from [[commons:Data:I18n/Uses TemplateStyles.tab]]
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end
local function getConfig()
return mw.loadData('Module:Uses TemplateStyles/config')
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args, cfg)
local tStyles = mTableTools.compressSparseArray(args)
local box = p.renderBox(tStyles)
local trackingCategories = p.renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
function p.renderBox(tStyles)
local boxArgs = {}
if #tStyles < 1 then
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
else
local cfg = getConfig()
local tStylesLinks = {}
for i, ts in ipairs(tStyles) do
local link = string.format('[[:%s]]', ts)
local sandboxLink = nil
local tsTitle = mw.title.new(ts)
if tsTitle and cfg['sandbox_title'] then
local tsSandboxTitle = mw.title.new(string.format(
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
if tsSandboxTitle and tsSandboxTitle.exists then
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
end
end
tStylesLinks[i] = sandboxLink or link
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = format(
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
'\n' .. tStylesList
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
return ''
end
local cfg = getConfig()
local cats = {}
-- Error category
if #tStyles < 1 and cfg['error_category'] then
cats[#cats + 1] = cfg['error_category']
end
-- TemplateStyles category
titleObj = titleObj or mw.title.getCurrentTitle()
if (titleObj.namespace == 10 or titleObj.namespace == 828)
and not cfg['subpage_blacklist'][titleObj.subpageText]
then
local category = args.category or cfg['default_category']
if category then
cats[#cats + 1] = category
end
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local addedLevelCat = false
local addedPadlockCat = false
for i, ts in ipairs(tStyles) do
local tsTitleObj = mw.title.new(ts)
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
if cfg['protection_conflict_category'] and tsProt ~= currentProt and not addedLevelCat then
addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
end
if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
local content = tsTitleObj:getContent()
if not content:find(cfg['padlock_pattern']) then
cats[#cats + 1] = cfg['missing_padlock_category']
addedPadlockCat = true
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
d8c03c62b4a547f8918259e8509680e55bda1c90
Template:Uselang
10
423
1285
2022-11-24T16:30:47Z
mw>Tacsipacsi
0
move documentation to subpage, simplify code – {{int:lang}} is never <Lang>, it uses the fallback chain, ultimately falling back to "en"
wikitext
text/x-wiki
{{#if: {{{lang|}}} | {{{lang|}}} | {{int:Lang}} }}<noinclude>{{documentation}}</noinclude>
41c26d61caeb65fae8bd137d6b11adbfce457574
Template:Plainlist/styles.css
10
39
306
77
2022-12-11T06:59:53Z
wikipedia>Izno
0
add this reset from mobile.css
sanitized-css
text/css
/* {{pp-template|small=yes}} */
.plainlist ol,
.plainlist ul {
line-height: inherit;
list-style: none;
margin: 0;
padding: 0; /* Reset Minerva default */
}
.plainlist ol li,
.plainlist ul li {
margin-bottom: 0;
}
51706efa229ff8794c0d94f260a208e7c5e6ec30
Template:Plainlist
10
8
180
15
2022-12-12T22:45:26Z
wikipedia>Izno
0
add tstyles here
wikitext
text/x-wiki
<templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
582fe7098c25c1ecfc0ad32f62ecd674ebe2bdf0
Module:Shortcut
828
156
359
2022-12-13T23:41:34Z
wikipedia>Izno
0
use module:list for plainlist, move templatestyles to module space
Scribunto
text/plain
-- This module implements {{shortcut}}.
-- Set constants
local CONFIG_MODULE = 'Module:Shortcut/config'
-- Load required modules
local checkType = require('libraryUtil').checkType
local yesno = require('Module:Yesno')
local p = {}
local function message(msg, ...)
return mw.message.newRawMessage(msg, ...):plain()
end
local function makeCategoryLink(cat)
return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat)
end
function p._main(shortcuts, options, frame, cfg)
checkType('_main', 1, shortcuts, 'table')
checkType('_main', 2, options, 'table', true)
options = options or {}
frame = frame or mw.getCurrentFrame()
cfg = cfg or mw.loadData(CONFIG_MODULE)
local templateMode = options.template and yesno(options.template)
local redirectMode = options.redirect and yesno(options.redirect)
local isCategorized = not options.category or yesno(options.category) ~= false
-- Validate shortcuts
for i, shortcut in ipairs(shortcuts) do
if type(shortcut) ~= 'string' or #shortcut < 1 then
error(message(cfg['invalid-shortcut-error'], i), 2)
end
end
-- Make the list items. These are the shortcuts plus any extra lines such
-- as options.msg.
local listItems = {}
for i, shortcut in ipairs(shortcuts) do
local templatePath, prefix
if templateMode then
-- Namespace detection
local titleObj = mw.title.new(shortcut, 10)
if titleObj.namespace == 10 then
templatePath = titleObj.fullText
else
templatePath = shortcut
end
prefix = options['pre' .. i] or options.pre or ''
end
if options.target and yesno(options.target) then
listItems[i] = templateMode
and string.format("{{%s[[%s|%s]]}}", prefix, templatePath, shortcut)
or string.format("[[%s]]", shortcut)
else
listItems[i] = frame:expandTemplate{
title = 'No redirect',
args = templateMode and {templatePath, shortcut} or {shortcut, shortcut}
}
if templateMode then
listItems[i] = string.format("{{%s%s}}", prefix, listItems[i])
end
end
end
table.insert(listItems, options.msg)
-- Return an error if we have nothing to display
if #listItems < 1 then
local msg = cfg['no-content-error']
msg = string.format('<strong class="error">%s</strong>', msg)
if isCategorized and cfg['no-content-error-category'] then
msg = msg .. makeCategoryLink(cfg['no-content-error-category'])
end
return msg
end
local root = mw.html.create()
root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Shortcut/styles.css'} })
-- Anchors
local anchorDiv = root
:tag('div')
:addClass('module-shortcutanchordiv')
for i, shortcut in ipairs(shortcuts) do
local anchor = mw.uri.anchorEncode(shortcut)
anchorDiv:tag('span'):attr('id', anchor)
end
-- Shortcut heading
local shortcutHeading
do
local nShortcuts = #shortcuts
if nShortcuts > 0 then
local headingMsg = options['shortcut-heading'] or
redirectMode and cfg['redirect-heading'] or
cfg['shortcut-heading']
shortcutHeading = message(headingMsg, nShortcuts)
shortcutHeading = frame:preprocess(shortcutHeading)
end
end
-- Shortcut box
local shortcutList = root
:tag('div')
:addClass('module-shortcutboxplain noprint')
:attr('role', 'note')
if options.float and options.float:lower() == 'left' then
shortcutList:addClass('module-shortcutboxleft')
end
if options.clear and options.clear ~= '' then
shortcutList:css('clear', options.clear)
end
if shortcutHeading then
shortcutList
:tag('div')
:addClass('module-shortcutlist')
:wikitext(shortcutHeading)
end
local ubl = require('Module:List').unbulleted(listItems)
shortcutList:wikitext(ubl)
return tostring(root)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
-- Separate shortcuts from options
local shortcuts, options = {}, {}
for k, v in pairs(args) do
if type(k) == 'number' then
shortcuts[k] = v
else
options[k] = v
end
end
-- Compress the shortcut array, which may contain nils.
local function compressArray(t)
local nums, ret = {}, {}
for k in pairs(t) do
nums[#nums + 1] = k
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
shortcuts = compressArray(shortcuts)
return p._main(shortcuts, options, frame)
end
return p
03fd46a265e549852a9ed3d3a9249b247d84cb4f
Module:Italic title/doc
828
198
558
2022-12-16T02:06:33Z
wikipedia>Izno
0
add lua
wikitext
text/x-wiki
{{High-risk| approximately 844000 }}
{{module rating|protected}}
{{Lua|Module:Yesno|Module:Arguments}}
This module implements {{tl|italic title}} and {{tl|italic dab}}. Please see the template pages for documentation.
5dea766bbc5c3c2d91e2b8df9e54d506aef23b35
Template:Ombox
10
146
1273
339
2022-12-17T17:51:51Z
mw>Clump
0
Reverted edits by [[Special:Contribs/2001:44C8:4226:7A84:1:0:8319:25AC|2001:44C8:4226:7A84:1:0:8319:25AC]] ([[User talk:2001:44C8:4226:7A84:1:0:8319:25AC|talk]]) to last version by Clump
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Message box|ombox}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
f5c3203172e44c84d587cc7824db31d90604ddcb
Template:Mbox
10
246
716
2022-12-18T05:46:16Z
wikipedia>TadejM
0
wikitext
text/x-wiki
{{#invoke:Message box|mbox}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
5bfb2becf8bed35974b47e3ff8660dc14bee40c7
Template:))
10
38
75
2022-12-18T08:36:48Z
mw>Rebulka
0
překlad a editace
wikitext
text/x-wiki
}}<noinclude>
{{documentation}}[[Category:Workaround templates]]
</noinclude>
e2331ab1b2f6b7061b29f929a502a016b6d54a54
Template:Hlist/styles.css
10
136
308
2022-12-26T18:00:17Z
wikipedia>Izno
0
actually remove that block, someone can dig for authorship
sanitized-css
text/css
/* {{pp-protected|reason=match parent|small=yes}} */
/*
* hlist styles are defined in core and Minerva and differ in Minerva. The
* current definitions here (2023-01-01) are sufficient to override Minerva
* without use of the hlist-separated class. The most problematic styles were
* related to margin, padding, and the bullet. Check files listed at
* [[MediaWiki talk:Common.css/to do#hlist-separated]]
*/
/*
* TODO: When the majority of readership supports it (or some beautiful world
* in which grade C support is above the minimum threshold), use :is()
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
/*
* don't trust the note that says margin doesn't work with inline
* removing margin: 0 makes dds have margins again
* We also want to reset margin-right in Minerva
*/
margin: 0;
display: inline;
}
/* Display requested top-level lists inline */
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
/* Display nested lists inline */
.hlist dl dl,
.hlist dl ol,
.hlist dl ul,
.hlist ol dl,
.hlist ol ol,
.hlist ol ul,
.hlist ul dl,
.hlist ul ol,
.hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li {
display: none;
}
/* TODO: :not() can maybe be used here to remove the later rule. naive test
* seems to work. more testing needed. like so:
*.hlist dt:not(:last-child)::after {
* content: ": ";
*}
*.hlist dd:not(:last-child)::after,
*.hlist li:not(:last-child)::after {
* content: " · ";
* font-weight: bold;
*}
*/
/* Generate interpuncts */
.hlist dt::after {
content: ": ";
}
.hlist dd::after,
.hlist li::after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child::after,
.hlist dt:last-child::after,
.hlist li:last-child::after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child::before,
.hlist dd dt:first-child::before,
.hlist dd li:first-child::before,
.hlist dt dd:first-child::before,
.hlist dt dt:first-child::before,
.hlist dt li:first-child::before,
.hlist li dd:first-child::before,
.hlist li dt:first-child::before,
.hlist li li:first-child::before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child::after,
.hlist dd dt:last-child::after,
.hlist dd li:last-child::after,
.hlist dt dd:last-child::after,
.hlist dt dt:last-child::after,
.hlist dt li:last-child::after,
.hlist li dd:last-child::after,
.hlist li dt:last-child::after,
.hlist li li:last-child::after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li::before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child::before,
.hlist dt ol > li:first-child::before,
.hlist li ol > li:first-child::before {
content: " (" counter(listitem) "\a0";
}
8c9dd9c9c00f30eead17fe10f51d183333e81f33
Module:List
828
30
164
59
2022-12-29T17:57:56Z
wikipedia>Izno
0
add templatestyles for hlist
Scribunto
text/plain
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes and TemplateStyles
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for _, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create('div')
for _, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for _, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.renderTrackingCategories(args)
local isDeprecated = false -- Tracks deprecated parameters.
for k, v in pairs(args) do
k = tostring(k)
if k:find('^item_style%d+$') or k:find('^item_value%d+$') then
isDeprecated = true
break
end
end
local ret = ''
if isDeprecated then
ret = ret .. '[[Category:List templates with deprecated parameters]]'
end
return ret
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
local list = p.renderList(data)
local trackingCategories = p.renderTrackingCategories(args)
return list .. trackingCategories
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame, {
valueFunc = function (key, value)
if not value or not mw.ustring.find(value, '%S') then return nil end
if mw.ustring.find(value, '^%s*[%*#;:]') then
return value
else
return value:match('^%s*(.-)%s*$')
end
return nil
end
})
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
7a4f36a6e9cd56370bdd8207d23694124821dc1a
Module:Navbox/configuration
828
95
206
2022-12-29T18:14:27Z
wikipedia>Izno
0
get these in
Scribunto
text/plain
return {
aria_label = 'Navbox',
nowrap_item = '%s<span class="nowrap">%s</span>',
templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }
},
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
-- do not localize marker table
marker = {
oddeven = '\127_ODDEVEN_\127',
restart = '\127_ODDEVEN0_\127',
regex = '\127_ODDEVEN(%d?)_\127'
},
category = {
orphan = '[[Category:Navbox orphans]]',
horizontal_lists = 'Navigational boxes without horizontal lists',
background_colors = 'Navboxes using background colours',
illegible = 'Potentially illegible navboxes',
borders = 'Navboxes using borders',
},
keyword = {
border_subgroup = 'subgroup',
border_child = 'child',
border_none = 'none',
evenodd_swap = 'swap',
navbar_off = 'off',
navbar_plain = 'plain',
nocat_false = 'false',
nowrapitems_yes = 'yes',
orphan_yes = 'yes',
state_collapsed = 'collapsed',
state_off = 'off',
state_plain = 'plain',
subpage_doc = 'doc',
subpage_sandbox = 'sandbox',
subpage_testcases = 'testcases',
tracking_no = 'no'
},
class = {
autocollapse = 'autocollapse',
collapsible = 'mw-collapsible',
collapsed = 'mw-collapsed',
-- Warning
navbox = 'navbox', -- WMF currently hides 'navbox' from mobile,
-- so you probably shouldn't change the navbox class.
navbox_abovebelow = 'navbox-abovebelow',
navbox_group = 'navbox-group',
navbox_image = 'navbox-image',
navbox_inner = 'navbox-inner',
navbox_list = 'navbox-list',
navbox_list_with_group = 'navbox-list-with-group',
navbox_part = 'navbox-', -- do not l10n
navbox_styles = 'navbox-styles',
navbox_subgroup = 'navbox-subgroup',
navbox_title = 'navbox-title', -- l10n only if you change pattern.navbox_title below
navbox_odd_part = 'odd', -- do not l10n
navbox_even_part = 'even', -- do not l10n
nomobile = 'nomobile',
nowraplinks = 'nowraplinks',
noviewer = 'noviewer' -- used to remove images from MediaViewer
},
pattern = {
listnum = '^list(%d+)$',
class = 'class',
sandbox = '/sandbox$',
navbox = 'Template:Navbox',
nowrap = '^<span class="nowrap">',
style = 'style$',
navbox_title = '<th[^>]*"navbox%-title"',
hlist = 'hlist',
plainlist = 'plainlist',
},
arg = {
above = 'above',
aboveclass = 'aboveclass',
abovestyle = 'abovestyle',
basestyle = 'basestyle',
bodyclass = 'bodyclass',
bodystyle = 'bodystyle',
border = 'border',
below = 'below',
belowclass = 'belowclass',
belowstyle = 'belowstyle',
evenodd = 'evenodd',
evenstyle = 'evenstyle',
group1 = 'group1',
group2 = 'group2',
group_and_num = 'group%d',
groupstyle_and_num = 'group%dstyle',
groupclass = 'groupclass',
groupstyle = 'groupstyle',
groupwidth = 'groupwidth',
innerstyle = 'innerstyle',
image = 'image',
imageclass = 'imageclass',
imageleft = 'imageleft',
imageleftstyle = 'imageleftstyle',
imagesetyle = 'imagestyle',
list_and_num = 'list%d',
listclass_and_num = 'list%dclass',
liststyle_and_num = 'list%dstyle',
list1padding = 'list1padding',
listclass = 'listclass',
listpadding = 'listpadding',
liststyle = 'liststyle',
name = 'name',
navbar = 'navbar',
navboxclass = 'navboxclass',
nocat = 'nocat',
nowrapitems = 'nowrapitems',
oddstyle = 'oddstyle',
orphan = 'orphan',
state = 'state',
style = 'style',
templatestyles = 'templatestyles',
child_templatestyles = 'child templatestyles',
title = 'title',
titleclass = 'titleclass',
titlestyle = 'titlestyle',
tracking = 'tracking'
},
-- names of navbar arguments
navbar = {
name = 1,
fontstyle = 'fontstyle',
mini = 'mini'
}
}
4148736fd32a93636c0413e73ed38afaef065ec9
Module:Navbar/configuration
828
92
200
2022-12-29T18:18:21Z
wikipedia>Izno
0
add hlist/styles.css
Scribunto
text/plain
return {
['templatestyles'] = 'Module:Navbar/styles.css',
['hlist_templatestyles'] = 'Hlist/styles.css',
['box_text'] = 'This box: ', -- default text box when not plain or mini
['title_namespace'] = 'Template', -- namespace to default to for title
['invalid_title'] = 'Invalid title ',
['classes'] = { -- set a line to nil if you don't want it
['navbar'] = 'navbar',
['plainlinks'] = 'plainlinks', -- plainlinks
['horizontal_list'] = 'hlist', -- horizontal list class
['mini'] = 'navbar-mini', -- class indicating small links in the navbar
['this_box'] = 'navbar-boxtext',
['brackets'] = 'navbar-brackets',
-- 'collapsible' is the key for a class to indicate the navbar is
-- setting up the collapsible element in addition to the normal
-- navbar.
['collapsible'] = 'navbar-collapse',
['collapsible_title_mini'] = 'navbar-ct-mini',
['collapsible_title_full'] = 'navbar-ct-full'
}
}
b007c336b17ec4bcd4d5a9dca9f8cba301662b55
Module:Navbar
828
91
198
2022-12-29T18:20:02Z
wikipedia>Izno
0
add templatestyles for hlist
Scribunto
text/plain
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
local function get_title_arg(is_collapsible, template)
local title_arg = 1
if is_collapsible then title_arg = 2 end
if template then title_arg = 'template' end
return title_arg
end
local function choose_links(template, args)
-- The show table indicates the default displayed items.
-- view, talk, edit, hist, move, watch
-- TODO: Move to configuration.
local show = {true, true, true, false, false, false}
if template then
show[2] = false
show[3] = false
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
-- TODO: Consider removing TableTools dependency.
for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
local num = index[v]
if num then show[num] = true end
end
end
local remove_edit_link = args.noedit
if remove_edit_link then show[3] = false end
return show
end
local function add_link(link_description, ul, is_mini, font_style)
local l
if link_description.url then
l = {'[', '', ']'}
else
l = {'[[', '|', ']]'}
end
ul:tag('li')
:addClass('nv-' .. link_description.full)
:wikitext(l[1] .. link_description.link .. l[2])
:tag(is_mini and 'abbr' or 'span')
:attr('title', link_description.html_title)
:cssText(font_style)
:wikitext(is_mini and link_description.mini or link_description.full)
:done()
:wikitext(l[3])
:done()
end
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
if not title then
error(cfg.invalid_title .. title_text)
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
-- TODO: Get link_descriptions and show into the configuration module.
-- link_descriptions should be easier...
local link_descriptions = {
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
['link'] = title.fullText, ['url'] = false },
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
['link'] = talkpage, ['url'] = false },
{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
['link'] = title:fullUrl('action=edit'), ['url'] = true },
{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
['link'] = title:fullUrl('action=history'), ['url'] = true },
{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template',
['link'] = title:fullUrl('action=watch'), ['url'] = true }
}
local ul = mw.html.create('ul')
if has_brackets then
ul:addClass(cfg.classes.brackets)
:cssText(font_style)
end
for i, _ in ipairs(displayed_links) do
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
end
return ul:done()
end
function p._navbar(args)
-- TODO: We probably don't need both fontstyle and fontcolor...
local font_style = args.fontstyle
local font_color = args.fontcolor
local is_collapsible = args.collapsible
local is_mini = args.mini
local is_plain = args.plain
local collapsible_class = nil
if is_collapsible then
collapsible_class = cfg.classes.collapsible
if not is_plain then is_mini = 1 end
if font_color then
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
end
end
local navbar_style = args.style
local div = mw.html.create():tag('div')
div
:addClass(cfg.classes.navbar)
:addClass(cfg.classes.plainlinks)
:addClass(cfg.classes.horizontal_list)
:addClass(collapsible_class) -- we made the determination earlier
:cssText(navbar_style)
if is_mini then div:addClass(cfg.classes.mini) end
local box_text = (args.text or cfg.box_text) .. ' '
-- the concatenated space guarantees the box text is separated
if not (is_mini or is_plain) then
div
:tag('span')
:addClass(cfg.classes.box_text)
:cssText(font_style)
:wikitext(box_text)
end
local template = args.template
local displayed_links = choose_links(template, args)
local has_brackets = args.brackets
local title_arg = get_title_arg(is_collapsible, template)
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
div:node(list)
if is_collapsible then
local title_text_class
if is_mini then
title_text_class = cfg.classes.collapsible_title_mini
else
title_text_class = cfg.classes.collapsible_title_full
end
div:done()
:tag('div')
:addClass(title_text_class)
:cssText(font_style)
:wikitext(args[1])
end
local frame = mw.getCurrentFrame()
-- hlist -> navbar is best-effort to preserve old Common.css ordering.
return frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
} .. frame:extensionTag{
name = 'templatestyles', args = { src = cfg.templatestyles }
} .. tostring(div:done())
end
function p.navbar(frame)
return p._navbar(require('Module:Arguments').getArgs(frame))
end
return p
79f907e59eaa8bbf8dd50bb751933ebeaaa7eb17
Template:Chart top
10
206
590
2023-01-11T14:32:15Z
wikipedia>Plastikspork
0
Add |title=
wikitext
text/x-wiki
{| class="collapsible {{#ifeq:{{Yesno-no|{{{collapsed|{{{collapse|}}}}}}}}|yes|collapsed|expanded}}" style="{{#switch:{{{align|}}}{{{float|}}}
| left = margin: 0.3em 1em 0.3em 0; float:left; clear:{{{clear|left}}}; min-width:{{{min-width|{{{width|33em}}}}}};
| right = margin: 0.3em 0 0.3em 1em; float:right; clear:{{{clear|right}}}; min-width:{{{min-width|{{{width|33em}}}}}};
| #default = margin: 0.3em auto auto; clear:{{{clear|none}}}; min-width:{{{min-width|{{{width|60em}}}}}};
}} width:{{{width|auto}}}; font-size:85%; border:1px solid #aaa"
! style="padding:0.2em 0.3em 0.2em {{#if:{{{template_name|}}}|0.3em|4.3em}};{{#if:{{{background|}}}|background:{{{background|}}}|background:none}}; width:{{{width|auto}}}" | {{#if:{{{template_name|}}}
|{{Navbar-collapsible|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}|{{{template_name}}}}}
|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}
}}
|-
| style="text-align:{{{text-align|center}}}" | {{#invoke:Check for unknown parameters|check|unknown=[[Category:Pages using chart top with unknown parameters|_VALUE_{{PAGENAME}}]]|preview=Page using [[Template:Chart top]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | align | background | clear | collapse | collapsed | float | min-width | template_name | text-align | title | width }}<noinclude>
|}
{{documentation}}</noinclude>
ad95734f767d68a3d7d70174fbc23ed2e147382e
Template:Large
10
212
602
2023-01-16T01:12:34Z
wikipedia>Jonesey95
0
use this template's own documentation
wikitext
text/x-wiki
<span style="font-size:120%">{{{1}}}</span><noinclude>
{{Documentation}}
</noinclude>
8ba6ec8c3178e22dc1f05aa239df8a2b052be668
Template:Template other
10
4
6
2023-01-21T02:26:58Z
w>Otonashi Ayana
0
1 revision imported
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
| template
| other
}}
}}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
06fb13d264df967b5232141067eb7d2b67372d76
Template:Infobox
10
3
4
2023-01-21T02:31:54Z
w>Otonashi Ayana
0
1 revision imported from [[:dev:Template:Infobox]]
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go in the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
817a9f5b6524eced06a57bd1d5fd7179f9369bf2
Module:Infobox
828
5
8
2023-01-21T02:31:58Z
w>Otonashi Ayana
0
1 revision imported from [[:dev:Module:Infobox]]
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end
local function fixChildBoxes(sval, tt)
local function notempty( s ) return s and s:match( '%S' ) end
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:addClass('infobox-label')
-- @deprecated next; target .infobox-<name> .infobox-label
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
end
local dataCell = row:tag('td')
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:addClass(rowArgs.class)
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
local function renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
})
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(require('Module:Italic title')._main({}))
end
end
-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if args.decat == 'yes' then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local hlist_templatestyles = ''
if lists.hlist_t.found then
hlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present
-- and not blank, or we are processing "prefix1" and "prefix" is
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
0ddb7e5c8426d67cd589b710efb9912ddfb67fea
Template:Infobox character
10
2
2
2023-01-21T17:09:30Z
w>Otonashi Ayana
0
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{{name}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = [[File:{{{image}}}|x350px]]
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{firstAppearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
<pre>
{{infobox character
| name = {{PAGENAME}}
| jname =
| image =
| aka =
| gender =
| age =
| firstAppearance =
| seiyu =
| relations =
}}</pre>
73810c458f02cc86aa3dfad3221d8354e30dc4e8
Module:Infobox/styles.css
828
6
10
2023-01-21T20:07:03Z
w>Otonashi Ayana
0
text
text/plain
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
}
.infobox-3cols-child {
margin: auto;
}
.infobox .navbar {
font-size: 100%;
}
/* T281642 */
body.skin-minerva .infobox-header,
body.skin-minerva .infobox-subheader,
body.skin-minerva .infobox-above,
body.skin-minerva .infobox-title,
body.skin-minerva .infobox-image,
body.skin-minerva .infobox-full-data,
body.skin-minerva .infobox-below {
text-align: center;
}
@media screen and (max-width:840px){
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
/* @noflip */
margin-left: auto;
margin-right:auto;
padding: 0.2em;
margin-bottom:1em;
}
.infobox-image{
text-align:center;
}
}
96007587f0b8d711d3fb79a06ec4a51c7eeb4007
Template:Sandbox other
10
24
47
2023-01-22T23:53:41Z
mw>Tacsipacsi
0
Undo revision 5731780 by [[Special:Contributions/2001:D08:1810:6E83:1:2:5E36:2856|2001:D08:1810:6E83:1:2:5E36:2856]] ([[User talk:2001:D08:1810:6E83:1:2:5E36:2856|talk]]): test edit
wikitext
text/x-wiki
<onlyinclude>{{#switch:{{SUBPAGENAME}}|sandbox|doc={{{1|}}}|#default={{{2|}}}}}</onlyinclude>
{{documentation}}
44919af6b57ac865d8ec53eabfcb2cb9de35f157
Template:Notice
10
256
736
2023-01-25T22:32:14Z
wikipedia>Izno
0
per tper
wikitext
text/x-wiki
{{Mbox
| name = Notice
| demospace = {{{demospace|}}}
| style = {{#if:{{{style|}}} |{{{style}}} }}
| subst = <includeonly>{{subst:substcheck}}</includeonly>
| type = notice
| image = {{#if:{{{image|}}} |[[File:{{{image}}}|40px|Notice|alt={{{imagealt|}}}]]}}
| small = {{{small|}}}
| smallimage = {{#if:{{{image|}}} |[[File:{{{image}}}|30px|Notice|alt={{{imagealt|}}}]]}}
| imageright = {{#if:{{{imageright|}}} |{{{imageright}}} |{{#if:{{{shortcut|{{{shortcut1|}}}}}} |{{Ombox/shortcut|{{{shortcut|{{{shortcut1|}}}}}}|{{{shortcut2|}}}|{{{shortcut3|}}}|{{{shortcut4|}}}|{{{shortcut5|}}}}}}} }}
| textstyle = {{{textstyle|text-align: {{#if:{{{center|}}}|center|{{{align|left}}}}};}}}
| text = {{#if:{{{header|{{{heading|{{{title|}}}}}}}}} |<div style="{{{headstyle|text-align: {{#if:{{{center|}}}|center|left}};}}}">'''{{{header|{{{heading|{{{title|}}}}}}}}}'''</div>}}<!--
-->{{{text|{{{content|{{{reason|{{{1}}}}}}}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
2cbdbb721ca517005f6827650eef5b0f17537a43
Module:TNT
828
27
53
2023-02-02T01:14:59Z
mw>ExE Boss
0
Only use the `zzz123` workaround for integer‑only parameter names
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
params[k - 2] = mw.text.trim(v)
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
function p.getTemplateData(dataset)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
local names = {}
for _, field in ipairs(data.schema.fields) do
table.insert(names, field.name)
end
local numOnly = true
local params = {}
local paramOrder = {}
for _, row in ipairs(data.data) do
local newVal = {}
local name = nil
for pos, columnName in ipairs(names) do
if columnName == 'name' then
name = row[pos]
else
newVal[columnName] = row[pos]
end
end
if name then
if (
(type(name) ~= "number")
and (
(type(name) ~= "string")
or not string.match(name, "^%d+$")
)
) then
numOnly = false
end
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
if numOnly then
params['zzz123']=''
end
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description,
})
if numOnly then
json = string.gsub(json,'"zzz123":"",?', "")
end
return json
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error(string.format([['''Missing JsonConfig extension, or not properly configured;
Cannot load https://commons.wikimedia.org/wiki/Data:%s.
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset))
end
local data = mw.ext.data.get(dataset, lang)
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
e8ec673cd9d57a37a2bc326979c7980f1657fc3a
Template:Dated maintenance category (articles)
10
137
310
2023-02-03T03:07:34Z
wikipedia>UtherSRG
0
UtherSRG moved page [[Template:DMCA]] to [[Template:Dated maintenance category (articles)]]: [[Special:Permalink/1137158761|Requested]] by Robertsky at [[WP:RM/TR]]: Per RM discussion. See [[Template_talk:DMCA#Requested_move_26_January_2023]]. Template protected at template editor/admin level
wikitext
text/x-wiki
{{Dated maintenance category
|onlyarticles=yes
|1={{{1|}}}
|2={{{2|}}}
|3={{{3|}}}
|4={{{4|}}}
|5={{{5|}}}
}}<noinclude>
{{documentation|Template:Dated maintenance category/doc}}
</noinclude>
6bbc57c75cc28708a0e71dd658224d5945d80d68
Template:DMCA
10
70
146
2023-02-03T21:12:07Z
wikipedia>Paine Ellsworth
0
add [[WP:RCAT|rcat template]]
wikitext
text/x-wiki
#REDIRECT [[Template:Dated maintenance category (articles)]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
711d3f1c53fa704297f675a8dcf1a56719c5b654
Template:Distinguish
10
143
333
2023-02-04T21:16:13Z
wikipedia>Hog Farm
0
[[Wikipedia:Templates for discussion/Log/2023 February 4#Template:Distinguish]] closed as keep ([[WP:XFDC#4.0.13|XFDcloser]])
wikitext
text/x-wiki
{{#invoke:Distinguish|distinguish}}<noinclude><!-- splitting these lines causes {{Documentation}} template to terminate green shading when Distinguish is used in /doc pages. -->
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata, not here! -->
</noinclude>
f949a4cbfd6eb0ab77b832e69059a40a964b1fd8
Module:Exponential search
828
248
720
2023-02-10T20:10:53Z
wikipedia>Uzume
0
strict
Scribunto
text/plain
-- This module provides a generic exponential search algorithm.
require[[strict]]
local checkType = require('libraryUtil').checkType
local floor = math.floor
local function midPoint(lower, upper)
return floor(lower + (upper - lower) / 2)
end
local function search(testFunc, i, lower, upper)
if testFunc(i) then
if i + 1 == upper then
return i
end
lower = i
if upper then
i = midPoint(lower, upper)
else
i = i * 2
end
return search(testFunc, i, lower, upper)
else
upper = i
i = midPoint(lower, upper)
return search(testFunc, i, lower, upper)
end
end
return function (testFunc, init)
checkType('Exponential search', 1, testFunc, 'function')
checkType('Exponential search', 2, init, 'number', true)
if init and (init < 1 or init ~= floor(init) or init == math.huge) then
error(string.format(
"invalid init value '%s' detected in argument #2 to " ..
"'Exponential search' (init value must be a positive integer)",
tostring(init)
), 2)
end
init = init or 2
if not testFunc(1) then
return nil
end
return search(testFunc, init, 1, nil)
end
a9037be0c44536be79b2d7a26155bfb907368ae7
Module:Lua banner
828
121
274
2023-02-16T14:39:53Z
wikipedia>Uzume
0
[[Module:Citation]] has been blanked since [[Wikipedia:Templates for discussion/Log/2018 May 13#Module:Citation]]; remove special handling
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules)
local trackingCategories = p.renderTrackingCategories(args, modules)
return box .. trackingCategories
end
function p.renderBox(modules)
local boxArgs = {}
if #modules < 1 then
boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
local maybeSandbox = mw.title.new(module .. '/sandbox')
if maybeSandbox.exists then
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
end
end
local moduleList = mList.makeList('bulleted', moduleLinks)
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" then
title = title.basePageTitle
end
if title.contentModel == "Scribunto" then
boxArgs.text = 'This module depends on the following other modules:' .. moduleList
else
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]'
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj)
if yesno(args.nocat) then
return ''
end
local cats = {}
-- Error category
if #modules < 1 then
cats[#cats + 1] = 'Lua templates with errors'
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if not subpageBlacklist[titleObj.subpageText] then
local protCatName
if titleObj.namespace == 10 then
local category = args.category
if not category then
local categories = {
['Module:String'] = 'Templates based on the String Lua module',
['Module:Math'] = 'Templates based on the Math Lua module',
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module'
}
category = modules[1] and categories[modules[1]]
category = category or 'Lua-based templates'
end
cats[#cats + 1] = category
protCatName = "Templates using under-protected Lua modules"
elseif titleObj.namespace == 828 then
protCatName = "Modules depending on under-protected modules"
end
if not args.noprotcat and protCatName then
local protLevels = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
local currentProt
if titleObj.id ~= 0 then
-- id is 0 (page does not exist) if am previewing before creating a template.
currentProt = titleObj.protectionLevels["edit"][1]
end
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end
for i, module in ipairs(modules) do
if module ~= "WP:libraryUtil" then
local moduleProt = mw.title.new(module).protectionLevels["edit"][1]
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end
if moduleProt < currentProt then
cats[#cats + 1] = protCatName
break
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
03ec1b34a40121efc562c0c64a67ebbf57d56dff
Template:Template display
10
127
286
2023-02-17T19:32:49Z
wikipedia>Jonesey95
0
link
wikitext
text/x-wiki
<includeonly>{{#invoke:Message box|ombox|type=notice
|image={{#switch:{{{1}}}|adaptive=[[File:Different devices simple.svg|65x65px|link=|alt=]]|nomobile=[[File:Handheld devices no.svg|55px|link=|alt=]]|nodesktop=[[File:Desktop devices no.svg|55px|link=|alt=]]}}
|text={{#switch:{{{1}}}
| adaptive = This template is [[Adaptive web design|responsive]] and <strong>displays differently in mobile and desktop view</strong>. Read the documentation for an explanation of the differences and why they exist.
| nomobile = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the documentation for an explanation.
| nodesktop = This template does ''not'' display in the desktop view of Wikipedia; it is <strong>mobile only</strong>. Read the documentation for an explanation.
| nomobilesidebar = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the [[Template:Sidebar/doc|parent documentation]] for an explanation.
| vector2022 = This template does not work properly in the [[Wikipedia:Vector 2022|Vector 2022]] skin. Read the documentation for an explanation.
| #default = {{{1}}}
}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
47cc41eacc2d2dec246f01b81111b280cec901a3
Template:Italic title/doc
10
193
547
2023-03-02T00:32:10Z
wikipedia>DB1729
0
Reverted 1 edit by [[Special:Contributions/Tanzib1|Tanzib1]] ([[User talk:Tanzib1|talk]]) to last revision by DB1729
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]) -->
{{High-use}}
{{Template shortcut|Italic|Italics}}
{{lua|Module:Italic title}}
'''Template:Italic title''' italicizes page titles. Article titles cannot contain wiki formatting, such as <code><nowiki>''</nowiki></code>, so article titles cannot be italicized in the normal way. This template has the following effects:
* Titles with no [[parentheses]] <code>()</code> are fully italicised:
** {{Nowrap|<code>Foo</code>}} → {{Nowrap|'''''Foo'''''}}
** {{Nowrap|<code>Talk:Foo</code>}} → {{Nowrap|'''Talk:''Foo'''''}}
* Titles which contain parentheses are italicised before the first opening parenthesis:
** {{Nowrap|<code>Foo (bar)</code>}} → {{Nowrap|'''''Foo'' (bar)'''}}
** {{Nowrap|<code>Talk:Foo (bar)</code>}} → {{Nowrap|'''Talk:''Foo'' (bar)'''}}
* Italicization can be forced on parenthesized text with the {{para|all|yes}} parameter.
This template should only be used in articles that meet the criteria for italic titles given in the [[Wikipedia:Article titles#Italics and other formatting|Article titles]] policy.
Meta templates which use this template should place {{Tl|Auto italic title}} in their documentation.
==Location on page==
If the page has a {{t|Short description}} template, this template should go immediately underneath it, normally as the second item on the page. If there is no {{t|Short description}} template, add this template at the very top of the page, above everything else. There ought to be no blank line after {{tlg|Italic title|nolink=1}} because that will cause an extra blank line in the page's rendered appearance.
==Usage==
===Basic usage===
{{tlx|Italic title}}
===All parameters===
{{tlx|Italic title|noerror|string{{=}}text in title|all{{=}}yes}}
== Parameters ==
* {{para|1}}: if this is set to {{para|1|noerror}}, error messages are suppressed. See [[#Errors]] for more details.
* {{para|all}}: if this is set to {{para|all|yes}}, text in parentheses is italicized.
* {{para|string}}: instead of italicizing the whole title, italicize only some specific text. For example, using {{para|string|Ally McBeal}} on the page {{nowrap|"List of Ally McBeal episodes"}} would result in {{nowrap|"List of ''Ally McBeal'' episodes"}}.
<code><nowiki>{{</nowiki>[[Wikipedia:Page name#Changing the displayed title|DISPLAYTITLE]]:Desired Title<nowiki>}}</nowiki></code> can be used instead in cases not covered by the parameters, e.g. two substrings with italics, or italics combined with lowercase first character.
== Errors ==
Sometimes you may see red error messages like this at the top of the page:
<span class="error"><nowiki>Warning: Display title "<i>Article title (disambiguation)</i>" overrides earlier display title "<i>Article title</i> (disambiguation)".</nowiki></span>
This usually means that there is another instance of {{tl|Italic title}} on the page, usually added by one of the infoboxes. Certain infoboxes, for example {{tl|Infobox album}}, add {{tl|Italic title}} by default. Check the template documentation for any infobox used on the page; it may have instructions about how to deal with italic titles. You may be able to adjust the italics from the infobox instead of using {{tl|Italic title}} at the top of the article. Or if that doesn't work, you may be able to disable the infobox's italics code altogether.
If you are still having problems, try putting {{tl|Italic title}} after the infobox. You can suppress the error message by using the code <code><nowiki>{{Italic title|noerror}}</nowiki></code>.
Technical details: this template uses the [[Wikipedia:Magic words#Behavior switches|DISPLAYTITLE magic word]] to italicize the title. Error messages can be produced by any two templates which use this magic word, and are not limited to this template. If you are unsure why you are getting a particular error message, you can ask about it at [[Wikipedia:Village pump (technical)]].
== Tracking categories ==
If the {{para|string}} parameter is used but that string is not found in the title, the page is added to [[:Category:Pages using italic title with no matching string]].
== TemplateData ==
{{TemplateDataHeader}}
<templatedata>
{
"description": "A template to italicize article titles",
"params": {
"1": {
"label": "Error options",
"description": "If set to \"noerror\", suppresses error messages. Using this is a last-ditch fix - see the template documentation for other options.",
"type": "string"
},
"all": {
"label": "All",
"description": "If set to \"yes\", italicization is forced on parenthesized text.",
"type": "string",
"required": false
},
"string": {
"label": "String",
"description": "Specify a string in the title to italicize, rather than italicizing the entire title.",
"type": "string",
"required": false
}
}
}
</templatedata>
==See also==
* [[WP:ITALICTITLE]]
* {{Tlx|Italic title prefixed}}
* {{Tlx|Italics correction}}
{{Correct title examples}}
{{When on basepage
|<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Correct title templates]]
[[Category:Lua-based templates]]
}}
0f6069dab29a8a2cce34923da916a69b26bd6ed1
Template:Warnsign
10
213
604
2023-03-09T01:55:22Z
wikipedia>Terasail
0
Use [[Template:Respond]]
wikitext
text/x-wiki
{{Respond|Ambox warning pn.svg|{{{{{|safesubst:}}}ucfirst:{{{1|Warning}}}}}|alt=red-outlined triangle containing exclamation point}}<noinclude>
{{Documentation}}
<!--Please add this template's categories to the /doc subpage, not here - thanks!-->
</noinclude>
77a823d5d0311de0e5fda3654918a744a3fa4033
Module:Lang/data
828
239
702
2023-03-09T14:48:18Z
wikipedia>Trappist the monk
0
fix;
Scribunto
text/plain
local lang_obj = mw.language.getContentLanguage();
local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag
--[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------
primary table of tables that decode:
lang -> language tags and names
script -> ISO 15924 script tags
region -> ISO 3166 region tags
variant -> iana registered variant tags
suppressed -> map of scripts tags and their associated language tags
all of these data come from separate modules that are derived from the IANA language-subtag-registry file
key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes
have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches
the first name.
]]
local function key_to_lower (module, src_type)
local out = {};
local source = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data
if 'var_sup' == src_type then
for k, v in pairs (source) do
out[k:lower()] = v; -- for variant and suppressed everything is needed
end
elseif 'lang' == src_type and source.active then -- for ~/iana_languages (active)
for k, v in pairs (source.active) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
elseif 'lang_dep' == src_type and source.deprecated then -- for ~/iana_languages (deprecated)
for k, v in pairs (source.deprecated) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
else -- here for all other sources
for k, v in pairs (source) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
end
return out;
end
local lang_name_table_t = {
lang = key_to_lower ('Module:Language/data/iana languages', 'lang'),
lang_dep = key_to_lower ('Module:Language/data/iana languages', 'lang_dep'),
script = key_to_lower ('Module:Language/data/iana scripts'), -- script keys are capitalized; set to lower
region = key_to_lower ('Module:Language/data/iana regions'), -- region keys are uppercase; set to lower
variant = key_to_lower ('Module:Language/data/iana variants', 'var_sup'),
suppressed = key_to_lower ('Module:Language/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower
}
--[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >--------------------------------
For internationalization; not used at en.wiki
The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal.
Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names
in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki
language list for the local language.
Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all.
When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens
add an appropriate entry to the override table below.
Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the
MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply
spelling differences:
bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho
bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym
dv: IANA: Dhivehi MW: Divehi
el: IANA: Modern Greek MW: Greek
ht: IANA: Haitian MW: Haitian Creole
ky: IANA: Kirghiz MW: Kyrgyz
li: IANA: Limburgan MW: Limburgish
or: IANA: Oriya MW: Odia
os: IANA: Ossetian MW: Ossetic
"pa: IANA: Panjabi MW: Punjabi
"ps: IANA: Pushto MW: Pashto
"to: IANA: Tonga MW: Tongan
"ug: IANA: Uighur MW: Uyghur
use the override table to override language names that are incorrect for your project
To see the list of names that MediaWiki has for your language, enter this in the Debug colsole:
=mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all'))
(replacing <tag> with the language tag for your language)
Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true.
]]
local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki
-- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all
if true == media_wiki_override_enable then
local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki
for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list
if lang_name_table_t.lang[tag] then -- if the tag is in the main list
lang_name_table_t.lang[tag] = name; -- overwrite exisiting name with the name from MediaWiki
end
end
end
--[[--------------------------< O V E R R I D E >--------------------------------------------------------------
Language codes and names in this table override the BCP47 names in lang_name_table.
indexes in this table shall always be lower case
]]
local override = {
------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------
["ab"] = "Abkhaz", -- to match en.wiki article name
["ca-valencia"] = "Valencian",
["cu"] = "Church Slavonic", -- 2nd IANA name;
["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names
["de-ch"] = "Swiss Standard German",
["en-au"] = "Australian English",
["en-ca"] = "Canadian English",
["en-emodeng"] = "Early Modern English",
["en-gb"] = "British English",
["en-ie"] = "Irish English",
["en-in"] = "Indian English",
["en-nz"] = "New Zealand English",
["en-us"] = "American English",
["en-za"] = "South African English",
["fy"] = "West Frisian", -- Western Frisian
["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title
["nl-be"] = "Flemish", -- match MediaWiki
["oc-provenc"] = "Provençal",
["ps"] = "Pashto", -- Pushto
["pt-br"] = "Brazilian Portuguese", -- match MediaWiki
["tw-asante"] = "Asante Twi",
["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name
-- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["av"] = "Avar", -- Avaric
["bo"] = "Standard Tibetan", -- Tibetan
["el"] = "Greek", -- Modern Greek
-- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa
["ff"] = "Fula", -- Fulah
["ht"] = "Haitian Creole", -- Haitian
["hz"] = "Otjiherero", -- Herero
["ii"] = "Yi", -- Sichuan Yi
["ki"] = "Gikuyu", -- Kikuyu
["kl"] = "Greenlandic", -- Kalaallisut
["ky"] = "Kyrgyz", -- Kirghiz
["lg"] = "Luganda", -- Ganda
["li"] = "Limburgish", -- Limburgan
["mi"] = "Māori", -- Maori
["na"] = "Nauruan", -- Nauru
["nb"] = "Bokmål", -- Norwegian Bokmål
["nd"] = "Northern Ndebele", -- North Ndebele
["nn"] = "Nynorsk", -- Norwegian Nynorsk
["nr"] = "Southern Ndebele", -- South Ndebele
["ny"] = "Chichewa", -- Nyanja
["oj"] = "Ojibwe", -- Ojibwa
["or"] = "Odia", -- Oriya
["pa"] = "Punjabi", -- Panjabi
["rn"] = "Kirundi", -- Rundi
["sl"] = "Slovene", -- Slovenian
["ss"] = "Swazi", -- Swati
["st"] = "Sotho", -- Southern Sotho
["to"] = "Tongan", -- Tonga
--<end do-not-edit except to comment out>--
------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >----------------------------------------------
["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash)
["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name
["art"] = "constructed", -- to match en.wiki article; lowercase for category name
["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title
["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title
["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration;
["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat
["bxr"] = "Russian Buryat", -- Russia Buriat;
["bxu"] = "Chinese Buryat", -- China Buriat;
["byr"] = "Yipma", -- Baruya, Yipma
["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic
["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title
["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash)
["frr"] = "North Frisian", -- Northern Frisian
["frs"] = "East Frisian Low Saxon", -- Eastern Frisian
["gsw-fr"] = "Alsatian", -- match MediaWiki
["haa"] = "Hän", -- Han; to match en.wiki article title
["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash)
["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title
["jam"] = "Jamaican Patois", -- Jamaican Creole English
["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco
["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo
["mhr"] = "Meadow Mari", -- Eastern Mari
["mid"] = "Modern Mandaic", -- Mandaic
['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope;
["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash)
["mla"] = "Tamambo", -- Malo
['mte'] = "Mono-Alu", -- Mono (Solomon Islands)
['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope;
["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title
["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title
["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash)
["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title
["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text
["nrf-gg"] = "Guernésiais", -- match MediaWiki
["nrf-je"] = "Jèrriais", -- match MediaWiki
["nzi"] = "Nzema", -- Nzima; to match en.wiki article title
["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash)
["orv"] = "Old East Slavic", -- Old Russian
["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article
["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article
["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title
["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name()
["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article
["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title
["stq"] = "Saterland Frisian", -- Saterfriesisch
["und"] = "undetermined", -- capitalization to match existing category
["wrg"] = "Warrongo", -- Warungu
["xal-ru"] = "Kalmyk", -- to match en.wiki article title
["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño
["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title
["zxx"] = "no linguistic content", -- capitalization
-- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["ace"] = "Acehnese", -- Achinese
["aec"] = "Sa'idi Arabic", -- Saidi Arabic
["akl"] = "Aklan", -- Aklanon
["alt"] = "Altay", -- Southern Altai
["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache
["bal"] = "Balochi", -- Baluchi
-- ["bcl"] = "Central Bicolano", -- Central Bikol
["bin"] = "Edo", -- Bini
["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya
["chg"] = "Chagatay", -- Chagatai
["ckb"] = "Sorani Kurdish", -- Central Kurdish
["cnu"] = "Shenwa", -- Chenoua
["coc"] = "Cocopah", -- Cocopa
["diq"] = "Zazaki", -- Dimli
["fit"] = "Meänkieli", -- Tornedalen Finnish
["fkv"] = "Kven", -- Kven Finnish
["frk"] = "Old Frankish", -- Frankish
["gez"] = "Ge'ez", -- Geez
["gju"] = "Gujari", -- Gujari
["gsw"] = "Alemannic German", -- Swiss German
["gul"] = "Gullah", -- Sea Island Creole English
["hak"] = "Hakka", -- Hakka Chinese
["hbo"] = "Biblical Hebrew", -- Ancient Hebrew
["hnd"] = "Hindko", -- Southern Hindko
-- ["ikt"] = "Inuvialuk", -- Inuinnaqtun
["kaa"] = "Karakalpak", -- Kara-Kalpak
["khb"] = "Tai Lü", -- Lü
["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish
["kpo"] = "Kposo", -- Ikposo
["krj"] = "Kinaray-a", -- Kinaray-A
["ktz"] = "Juǀ'hoan", -- Juǀʼhoan
["lez"] = "Lezgian", -- Lezghian
["liv"] = "Livonian", -- Liv
["lng"] = "Lombardic", -- Langobardic
["mia"] = "Miami-Illinois", -- Miami
["miq"] = "Miskito", -- Mískito
["mix"] = "Mixtec", -- Mixtepec Mixtec
["mni"] = "Meitei", -- Manipuri
["mrj"] = "Hill Mari", -- Western Mari
["mww"] = "White Hmong", -- Hmong Daw
["nds-nl"] = "Dutch Low Saxon", -- Low German
-- ["new"] = "Nepal Bhasa", -- Newari
["nso"] = "Northern Sotho", -- Pedi
-- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari
["ood"] = "O'odham", -- Tohono O'odham
["otk"] = "Old Turkic", -- Old Turkish
["pal"] = "Middle Persian", -- Pahlavi
["pam"] = "Kapampangan", -- Pampanga
["phr"] = "Potwari", -- Pahari-Potwari
["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit
-- ["pnb"] = "Punjabi", -- Western Panjabi
["psu"] = "Shauraseni", -- Sauraseni Prākrit
["rap"] = "Rapa Nui", -- Rapanui
["rar"] = "Cook Islands Māori", -- Rarotongan
["rmu"] = "Scandoromani", -- Tavringer Romani
["rom"] = "Romani", -- Romany
["rup"] = "Aromanian", -- Macedo-Romanian
["ryu"] = "Okinawan", -- Central Okinawan
["sdc"] = "Sassarese", -- Sassarese Sardinian
["sdn"] = "Gallurese", -- Gallurese Sardinian
["shp"] = "Shipibo", -- Shipibo-Conibo
["src"] = "Logudorese", -- Logudorese Sardinian
["sro"] = "Campidanese", -- Campidanese Sardinian
["tkl"] = "Tokelauan", -- Tokelau
["tvl"] = "Tuvaluan", -- Tuvalu
["tyv"] = "Tuvan", -- Tuvinian
["vls"] = "West Flemish", -- Vlaams
["wep"] = "Westphalian", -- Westphalien
["xal"] = "Oirat", -- Kalmyk
["xcl"] = "Old Armenian", -- Classical Armenian
["yua"] = "Yucatec Maya", -- Yucateco
--<end do-not-edit except to comment out>--
------------------------------< P R I V A T E _ U S E _ T A G S >----------------------------------------------
["akk-x-latbabyl"] = "Late Babylonian",
["akk-x-midassyr"] = "Middle Assyrian Akkadian",
["akk-x-midbabyl"] = "Middle Babylonian Akkadian",
["akk-x-neoassyr"] = "Neo-Assyrian Akkadian",
["akk-x-neobabyl"] = "Neo-Babylonian Akkadian",
["akk-x-old"] = "Old Akkadian",
["akk-x-oldassyr"] = "Old Assyrian Akkadian",
["akk-x-oldbabyl"] = "Old Babylonian Akkadian",
["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages
["ca-x-old"] = "Old Catalan",
["cel-x-proto"] = "Proto-Celtic", -- cel in IANA is Celtic languages
["egy-x-demotic"] = "Demotic Egyptian",
["egy-x-late"] = "Late Egyptian",
["egy-x-middle"] = "Middle Egyptian",
["egy-x-old"] = "Old Egyptian",
["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages
["gmw-x-ecg"] = "East Central German",
["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre
["grc-x-attic"] = "Attic Greek",
["grc-x-biblical"] = "Biblical Greek",
["grc-x-byzant"] = "Byzantine Greek",
["grc-x-classic"] = "Classical Greek",
["grc-x-doric"] = "Doric Greek",
["grc-x-hellen"] = "Hellenistic Greek",
["grc-x-ionic"] = "Ionic Greek",
["grc-x-koine"] = "Koinē Greek",
["grc-x-medieval"] = "Medieval Greek",
["grc-x-patris"] = "Patristic Greek",
["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages
["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages
["ine-x-proto"] = "Proto-Indo-European",
["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages
["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages
["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there
["la-x-medieval"] = "Medieval Latin",
["la-x-new"] = "New Latin",
["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect
["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages
["prg-x-old"] = "Old Prussian",
["sem-x-ammonite"] = "Ammonite",
["sem-x-aramaic"] = "Aramaic",
["sem-x-canaan"] = "Canaanite languages",
["sem-x-dumaitic"] = "Dumaitic",
["sem-x-egurage"] = "Eastern Gurage",
["sem-x-hatran"] = "Hatran Aramaic",
["sem-x-oldsoara"] = "Old South Arabian",
["sem-x-palmyren"] = "Palmyrene Aramaic",
["sem-x-proto"] = "Proto-Semitic",
["sem-x-taymanit"] = "Taymanitic",
["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages
["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai
["yuf-x-wal"] = "Walapai",
["yuf-x-yav"] = "Yavapai",
}
--[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------
for those rare occasions when article titles don't fit with the normal '<language name>-language', this table
maps language code to article title. Use of this table should be avoided and the use of redirects preferred as
that is the long-standing method of handling article names that don't fit with the normal pattern
]]
local article_name = {
['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page
["lij"] = "Ligurian (Romance language)", -- Ligurian; see Template_talk:Lang#Ligurian_dab
['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon)
['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages
['mnr'] = "Mono language (California)", -- Mono (USA)
['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon)
['qwm'] = "Kuman (Russia)", -- Kuman (Russia); to avoid Kuman dab page
["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon)
["xlg"] = "Ligurian (ancient language)", -- see Template_talk:Lang#Ligurian_dab
["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo)
}
--[=[-------------------------< R T L _ S C R I P T S >--------------------------------------------------------
ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]]
last update to this list: 2017-12-24
]=]
local rtl_scripts = {
'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr',
'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb',
'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg',
'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole',
};
--[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------
This is a table of tables of transliteration standards and the language codes or language scripts that apply to
those standards. This table is used to create the tool-tip text associated with the transliterated text displayed
by some of the {{lang-??}} templates.
These tables are more-or-less copied directly from {{transl}}. The standard 'NO_STD' is a construct to allow for
the cases when no |std= parameter value is provided.
]]
local translit_title_table = {
['ahl'] = {
['default'] = 'Academy of the Hebrew Language transliteration',
},
['ala'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['ala-lc'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['batr'] = {
['default'] = 'Bikdash Arabic Transliteration Rules',
},
['bgn/pcgn'] = {
['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration',
},
['din'] = {
['ar'] = 'DIN 31635 Arabic',
['fa'] = 'DIN 31635 Arabic',
['ku'] = 'DIN 31635 Arabic',
['ps'] = 'DIN 31635 Arabic',
['tg'] = 'DIN 31635 Arabic',
['ug'] = 'DIN 31635 Arabic',
['ur'] = 'DIN 31635 Arabic',
['arab'] = 'DIN 31635 Arabic',
['default'] = 'DIN transliteration',
},
['eae'] = {
['default'] = 'Encyclopaedia Aethiopica transliteration',
},
['hepburn'] = {
['default'] = 'Hepburn transliteration',
},
['hunterian'] = {
['default'] = 'Hunterian transliteration',
},
['iast'] = {
['default'] = 'International Alphabet of Sanskrit transliteration',
},
['iso'] = { -- when a transliteration standard is supplied
['ab'] = 'ISO 9 Cyrillic',
['ba'] = 'ISO 9 Cyrillic',
['be'] = 'ISO 9 Cyrillic',
['bg'] = 'ISO 9 Cyrillic',
['kk'] = 'ISO 9 Cyrillic',
['ky'] = 'ISO 9 Cyrillic',
['mn'] = 'ISO 9 Cyrillic',
['ru'] = 'ISO 9 Cyrillic',
['tg'] = 'ISO 9 Cyrillic',
['uk'] = 'ISO 9 Cyrillic',
['bua'] = 'ISO 9 Cyrillic',
['sah'] = 'ISO 9 Cyrillic',
['tut'] = 'ISO 9 Cyrillic',
['xal'] = 'ISO 9 Cyrillic',
['cyrl'] = 'ISO 9 Cyrillic',
['ar'] = 'ISO 233 Arabic',
['ku'] = 'ISO 233 Arabic',
['ps'] = 'ISO 233 Arabic',
['ug'] = 'ISO 233 Arabic',
['ur'] = 'ISO 233 Arabic',
['arab'] = 'ISO 233 Arabic',
['he'] = 'ISO 259 Hebrew',
['yi'] = 'ISO 259 Hebrew',
['hebr'] = 'ISO 259 Hebrew',
['el'] = 'ISO 843 Greek',
['grc'] = 'ISO 843 Greek',
['ja'] = 'ISO 3602 Japanese',
['hira'] = 'ISO 3602 Japanese',
['hrkt'] = 'ISO 3602 Japanese',
['jpan'] = 'ISO 3602 Japanese',
['kana'] = 'ISO 3602 Japanese',
['zh'] = 'ISO 7098 Chinese',
['chi'] = 'ISO 7098 Chinese',
['pny'] = 'ISO 7098 Chinese',
['zho'] = 'ISO 7098 Chinese',
-- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani?
['hans'] = 'ISO 7098 Chinese',
['hant'] = 'ISO 7098 Chinese',
['ka'] = 'ISO 9984 Georgian',
['kat'] = 'ISO 9984 Georgian',
['arm'] = 'ISO 9985 Armenian',
['hy'] = 'ISO 9985 Armenian',
['th'] = 'ISO 11940 Thai',
['tha'] = 'ISO 11940 Thai',
['ko'] = 'ISO 11941 Korean',
['kor'] = 'ISO 11941 Korean',
['awa'] = 'ISO 15919 Indic',
['bho'] = 'ISO 15919 Indic',
['bn'] = 'ISO 15919 Indic',
['bra'] = 'ISO 15919 Indic',
['doi'] = 'ISO 15919 Indic',
['dra'] = 'ISO 15919 Indic',
['gon'] = 'ISO 15919 Indic',
['gu'] = 'ISO 15919 Indic',
['hi'] = 'ISO 15919 Indic',
['hno'] = 'ISO 15919 Indic',
['inc'] = 'ISO 15919 Indic',
['kn'] = 'ISO 15919 Indic',
['kok'] = 'ISO 15919 Indic',
['ks'] = 'ISO 15919 Indic',
['mag'] = 'ISO 15919 Indic',
['mai'] = 'ISO 15919 Indic',
['ml'] = 'ISO 15919 Indic',
['mr'] = 'ISO 15919 Indic',
['ne'] = 'ISO 15919 Indic',
['new'] = 'ISO 15919 Indic',
['or'] = 'ISO 15919 Indic',
['pa'] = 'ISO 15919 Indic',
['pnb'] = 'ISO 15919 Indic',
['raj'] = 'ISO 15919 Indic',
['sa'] = 'ISO 15919 Indic',
['sat'] = 'ISO 15919 Indic',
['sd'] = 'ISO 15919 Indic',
['si'] = 'ISO 15919 Indic',
['skr'] = 'ISO 15919 Indic',
['ta'] = 'ISO 15919 Indic',
['tcy'] = 'ISO 15919 Indic',
['te'] = 'ISO 15919 Indic',
['beng'] = 'ISO 15919 Indic',
['brah'] = 'ISO 15919 Indic',
['deva'] = 'ISO 15919 Indic',
['gujr'] = 'ISO 15919 Indic',
['guru'] = 'ISO 15919 Indic',
['knda'] = 'ISO 15919 Indic',
['mlym'] = 'ISO 15919 Indic',
['orya'] = 'ISO 15919 Indic',
['sinh'] = 'ISO 15919 Indic',
['taml'] = 'ISO 15919 Indic',
['telu'] = 'ISO 15919 Indic',
['default'] = 'ISO transliteration',
},
['jyutping'] = {
['default'] = 'Jyutping transliteration',
},
['mlcts'] = {
['default'] = 'Myanmar Language Commission Transcription System',
},
['mr'] = {
['default'] = 'McCune–Reischauer transliteration',
},
['nihon-shiki'] = {
['default'] = 'Nihon-shiki transliteration',
},
['no_std'] = { -- when no transliteration standard is supplied
['akk'] = 'Semitic transliteration',
['sem'] = 'Semitic transliteration',
['phnx'] = 'Semitic transliteration',
['xsux'] = 'Cuneiform transliteration',
},
['pinyin'] = {
['default'] = 'Pinyin transliteration',
},
['rr'] = {
['default'] = 'Revised Romanization of Korean transliteration',
},
['rtgs'] = {
['default'] = 'Royal Thai General System of Transcription',
},
['satts'] = {
['default'] = 'Standard Arabic Technical Transliteration System transliteration',
},
['scientific'] = {
['default'] = 'scientific transliteration',
},
['ukrainian'] = {
['default'] = 'Ukrainian National system of romanization',
},
['ungegn'] = {
['default'] = 'United Nations Group of Experts on Geographical Names transliteration',
},
['wadegile'] = {
['default'] = 'Wade–Giles transliteration',
},
['wehr'] = {
['default'] = 'Hans Wehr transliteration',
},
};
return
{
this_wiki_lang_tag = this_wiki_lang_tag,
this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction
article_name = article_name,
lang_name_table = lang_name_table_t,
override = override,
rtl_scripts = rtl_scripts,
special_tags_table = special_tags_table,
translit_title_table = translit_title_table,
};
44981b3b66900e816590946e3e049c421ebecc80
Template:Respond
10
217
612
2023-03-10T02:10:00Z
wikipedia>Terasail
0
Add safesubst
wikitext
text/x-wiki
<includeonly>[[File:{{{{{|safesubst:}}}#switch:{{{1|{{{icon|}}}}}}
|blackcheck = Black check.svg
|bluebrokenplus = Symbol unsupport2 vote.svg
|bluecheck2 = Cornflower blue check.svg
|bluecheck = Artículo bueno-blue.svg
|blueclock = Pictogram voting wait blue.svg
|blueplus = Symbol support2 vote.svg
|deferred = Symbol deferred.svg
|greencheck2 = Yes check.svg
|greencheck = Symbol confirmed.svg
|greenclock = Pictogram voting wait green.svg
|greenplus = Symbol support vote.svg
|greybrokenplus = Symbol unsupport vote.svg
|greyexclamation = Pictogram voting comment.svg
|info=Symbol information vote.svg
|minus = Symbol declined.svg
|neutral = Symbol neutral vote.svg
|orangeclock = Pictogram voting wait orange.svg
|orangeexclamation = Ambox important.svg
|redexclamation = Ambox important red.svg
|pinkclock = Pictogram voting wait pink.svg
|question2 = Symbol question.svg
|question = Pictogram voting question.svg
|wait = Symbol_wait.svg
|xmark2 = X mark.svg
|xmark = Symbol unrelated.svg
|yellowcheck = Yellow check.svg
|yellowclock = Pictogram voting wait.svg
|{{{1|{{{icon|Pictogram voting question.svg}}}}}}}}|{{{size|18px}}}|alt={{{alt|}}}]] '''{{{2|{{{text|Response}}}}}}'''</includeonly><noinclude>
{{Documentation}}
</noinclude>
b11f14454f435e825639a46c4fe356254a552b63
Module:Shortcut/styles.css
828
163
373
2023-03-14T15:53:59Z
wikipedia>Izno
0
Undid revision 1144571295 by [[Special:Contributions/TheDJ|TheDJ]] ([[User talk:TheDJ|talk]]) I'm sorry, that's not what we discussed or agreed to
sanitized-css
text/css
/* {{pp-template}} */
.module-shortcutboxplain {
float: right;
margin: 0 0 0 1em;
border: 1px solid #aaa;
background: #fff;
padding: 0.3em 0.6em 0.2em 0.6em;
text-align: center;
font-size: 85%;
}
.module-shortcutboxleft {
float: left;
margin: 0 1em 0 0;
}
.module-shortcutlist {
display: inline-block;
border-bottom: 1px solid #aaa;
margin-bottom: 0.2em;
}
.module-shortcutboxplain ul {
font-weight: bold;
}
.module-shortcutanchordiv {
position: relative;
top: -3em;
}
li .module-shortcutanchordiv {
float: right; /* IE/Edge in list items */
}
.mbox-imageright .module-shortcutboxplain {
padding: 0.4em 1em 0.4em 1em;
line-height: 1.3;
margin: 0;
}
ccf3877e4b14726147d3b1d8a297fbecacdb2cf8
Module:Sidebar/configuration
828
100
216
2023-03-14T22:32:24Z
wikipedia>Izno
0
add hlist and plainlist_templatestyles keys
Scribunto
text/plain
return {
i18n = {
child_yes = 'yes',
float_none = 'none',
float_left = 'left',
wrap_true = 'true',
navbar_none = 'none',
navbar_off = 'off',
default_list_title = 'List',
title_not_to_add_navbar = 'Template:Sidebar',
collapse_title_not_to_add_navbar = 'Template:Sidebar with collapsible lists',
templatestyles = 'Module:Sidebar/styles.css',
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
category = {
child = '[[Category:Pages using sidebar with the child parameter]]',
conversion = '[[Category:Sidebars with styles needing conversion]]'
},
pattern = {
collapse_sandbox = '/sandbox$',
sandbox = '/sandbox$',
subgroup = 'sidebar%-subgroup',
style_conversion = 'style$',
uncategorized_conversion_titles = {
'/[Ss]andbox',
'/[Tt]estcases',
'/[Dd]oc$'
}
},
class = {
sidebar = 'sidebar',
subgroup = 'sidebar-subgroup',
collapse = 'sidebar-collapse',
float_none = 'sidebar-none',
float_left = 'sidebar-left',
wraplinks = 'nowraplinks',
outer_title = 'sidebar-outer-title',
top_image = 'sidebar-top-image',
top_caption = 'sidebar-top-caption',
pretitle = 'sidebar-pretitle',
pretitle_with_top_image = 'sidebar-pretitle-with-top-image',
title = 'sidebar-title',
title_with_pretitle = 'sidebar-title-with-pretitle',
image = 'sidebar-image',
caption = 'sidebar-caption',
above = 'sidebar-above',
heading = 'sidebar-heading',
content = 'sidebar-content',
content_with_subgroup = 'sidebar-content-with-subgroup',
below = 'sidebar-below',
navbar = 'sidebar-navbar',
list = 'sidebar-list',
list_title = 'sidebar-list-title',
list_title_centered = 'sidebar-list-title-c',
list_content = 'sidebar-list-content'
}
}
}
dc2a980ac2162a898f7c21e6d6ba7e994dfeb315
Module:Sidebar
828
99
214
2023-03-14T22:35:53Z
wikipedia>Izno
0
move these items to config, discovered during work at meta
Scribunto
text/plain
require('strict')
local cfg = mw.loadData('Module:Sidebar/configuration')
local p = {}
local getArgs = require('Module:Arguments').getArgs
--[[
Categorizes calling templates and modules with a 'style' parameter of any sort
for tracking to convert to TemplateStyles.
TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module.
TODO would probably want to remove /log and /archive as CS1 does
]]
local function categorizeTemplatesWithInlineStyles(args)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 and title.namespace ~= 828 then return '' end
for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do
if title.text:match(pattern) then return '' end
end
for key, _ in pairs(args) do
if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == 'width' then
return cfg.i18n.category.conversion
end
end
end
--[[
For compatibility with the original {{sidebar with collapsible lists}}
implementation, which passed some parameters through {{#if}} to trim their
whitespace. This also triggered the automatic newline behavior.
]]
-- See ([[meta:Help:Newlines and spaces#Automatic newline]])
local function trimAndAddAutomaticNewline(s)
s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")
if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then
return '\n' .. s
else
return s
end
end
--[[
Finds whether a sidebar has a subgroup sidebar.
]]
local function hasSubgroup(s)
if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then
return true
else
return false
end
end
local function has_navbar(navbar_mode, sidebar_name)
return navbar_mode ~= cfg.i18n.navbar_none and
navbar_mode ~= cfg.i18n.navbar_off and
(
sidebar_name or
mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
cfg.i18n.title_not_to_add_navbar
)
end
local function has_list_class(args, htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, value in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, 'class') then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles(args)
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(args, htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.plainlist_templatestyles)
local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.hlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar(args.navbar, args.name) and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.hlist_templatestyles}
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note]
return hlist_styles .. plainlist_styles
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
--[[
Main sidebar function. Takes the frame, args, and an optional collapsibleClass.
The collapsibleClass is and should be used only for sidebars with collapsible
lists, as in p.collapsible.
]]
function p.sidebar(frame, args, collapsibleClass)
if not args then
args = getArgs(frame)
end
local hiding_templatestyles = table.concat(move_hiding_templatestyles(args))
local root = mw.html.create()
local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes
root = root:tag('table')
if not child then
root
:addClass(cfg.i18n.class.sidebar)
-- force collapsibleclass to be sidebar-collapse otherwise output nothing
:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)
:addClass('nomobile')
:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)
:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)
:addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)
:addClass(args.bodyclass or args.class)
:css('width', args.width or nil)
:cssText(args.bodystyle or args.style)
if args.outertitle then
root
:tag('caption')
:addClass(cfg.i18n.class.outer_title)
:addClass(args.outertitleclass)
:cssText(args.outertitlestyle)
:wikitext(args.outertitle)
end
if args.topimage then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.top_image)
:addClass(args.topimageclass)
:cssText(args.topimagestyle)
:wikitext(args.topimage)
if args.topcaption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.top_caption)
:cssText(args.topcaptionstyle)
:wikitext(args.topcaption)
end
end
if args.pretitle then
root
:tag('tr')
:tag('td')
:addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image
or cfg.i18n.class.pretitle)
:addClass(args.pretitleclass)
:cssText(args.basestyle)
:cssText(args.pretitlestyle)
:wikitext(args.pretitle)
end
else
root
:addClass(cfg.i18n.class.subgroup)
:addClass(args.bodyclass or args.class)
:cssText(args.bodystyle or args.style)
end
if args.title then
if child then
root
:wikitext(args.title)
else
root
:tag('tr')
:tag('th')
:addClass(args.pretitle and cfg.i18n.class.title_with_pretitle
or cfg.i18n.class.title)
:addClass(args.titleclass)
:cssText(args.basestyle)
:cssText(args.titlestyle)
:wikitext(args.title)
end
end
if args.image then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.image)
:addClass(args.imageclass)
:cssText(args.imagestyle)
:wikitext(args.image)
if args.caption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.caption)
:cssText(args.captionstyle)
:wikitext(args.caption)
end
end
if args.above then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.above)
:addClass(args.aboveclass)
:cssText(args.abovestyle)
:newline() -- newline required for bullet-points to work
:wikitext(args.above)
end
local rowNums = {}
for k, v in pairs(args) do
k = '' .. k
local num = k:match('^heading(%d+)$') or k:match('^content(%d+)$')
if num then table.insert(rowNums, tonumber(num)) end
end
table.sort(rowNums)
-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3
-- and content3 are specified)
for i = #rowNums, 1, -1 do
if rowNums[i] == rowNums[i - 1] then
table.remove(rowNums, i)
end
end
for i, num in ipairs(rowNums) do
local heading = args['heading' .. num]
if heading then
root
:tag('tr')
:tag('th')
:addClass(cfg.i18n.class.heading)
:addClass(args.headingclass)
:addClass(args['heading' .. num .. 'class'])
:cssText(args.basestyle)
:cssText(args.headingstyle)
:cssText(args['heading' .. num .. 'style'])
:newline()
:wikitext(heading)
end
local content = args['content' .. num]
if content then
root
:tag('tr')
:tag('td')
:addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup
or cfg.i18n.class.content)
:addClass(args.contentclass)
:addClass(args['content' .. num .. 'class'])
:cssText(args.contentstyle)
:cssText(args['content' .. num .. 'style'])
:newline()
:wikitext(content)
:done()
-- Without a linebreak after the </td>, a nested list like
-- "* {{hlist| ...}}" doesn't parse correctly.
:newline()
end
end
if args.below then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.below)
:addClass(args.belowclass)
:cssText(args.belowstyle)
:newline()
:wikitext(args.below)
end
if not child and has_navbar(args.navbar, args.name) then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.navbar)
:cssText(args.navbarstyle)
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
fontstyle = args.navbarfontstyle
})
end
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.templatestyles }
}
local templatestyles = ''
if args['templatestyles'] and args['templatestyles'] ~= '' then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] and args['child templatestyles'] ~= '' then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] and args['grandchild templatestyles'] ~= '' then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
add_list_styles(args), -- see [hlist_note] above about ordering
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles,
hiding_templatestyles,
tostring(root),
(child and cfg.i18n.category.child or ''),
categorizeTemplatesWithInlineStyles(args)
})
end
local function list_title(args, is_centered_list_titles, num)
local title_text = trimAndAddAutomaticNewline(args['list' .. num .. 'title']
or cfg.i18n.default_list_title)
local title
if is_centered_list_titles then
-- collapsible can be finicky, so provide some CSS/HTML to support
title = mw.html.create('div')
:addClass(cfg.i18n.class.list_title_centered)
:wikitext(title_text)
else
title = mw.html.create()
:wikitext(title_text)
end
local title_container = mw.html.create('div')
:addClass(cfg.i18n.class.list_title)
-- don't /need/ a listnumtitleclass because you can do
-- .templateclass .listnumclass .sidebar-list-title
:addClass(args.listtitleclass)
:cssText(args.basestyle)
:cssText(args.listtitlestyle)
:cssText(args['list' .. num .. 'titlestyle'])
:node(title)
:done()
return title_container
end
--[[
Main entry point for sidebar with collapsible lists.
Does the work of creating the collapsible lists themselves and including them
into the args.
]]
function p.collapsible(frame)
local args = getArgs(frame)
if not args.name and
frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, '') ==
cfg.i18n.collapse_title_not_to_add_navbar then
args.navbar = cfg.i18n.navbar_none
end
local contentArgs = {}
local is_centered_list_titles = false
if args['centered list titles'] and args['centered list titles'] ~= '' then
is_centered_list_titles = true
end
for k, v in pairs(args) do
local num = string.match(k, '^list(%d+)$')
if num then
local expand = args.expanded and
(args.expanded == 'all' or args.expanded == args['list' .. num .. 'name'])
local row = mw.html.create('div')
row
:addClass(cfg.i18n.class.list)
:addClass('mw-collapsible')
:addClass((not expand) and 'mw-collapsed' or nil)
:addClass(args['list' .. num .. 'class'])
:cssText(args.listframestyle)
:cssText(args['list' .. num .. 'framestyle'])
:node(list_title(args, is_centered_list_titles, num))
:tag('div')
:addClass(cfg.i18n.class.list_content)
:addClass('mw-collapsible-content')
-- don't /need/ a listnumstyleclass because you can do
-- .templatename .listnumclass .sidebar-list
:addClass(args.listclass)
:cssText(args.liststyle)
:cssText(args['list' .. num .. 'style'])
:wikitext(trimAndAddAutomaticNewline(args['list' .. num]))
contentArgs['content' .. num] = tostring(row)
end
end
for k, v in pairs(contentArgs) do
args[k] = v
end
return p.sidebar(frame, args, cfg.i18n.class.collapse)
end
return p
71fe765846593e025ca2f94371315e9dbb5bb4d2
Module:Message box/doc
828
434
1309
2023-03-18T03:49:47Z
mw>Uzume
0
-[[Module:No globals]]
wikitext
text/x-wiki
<noinclude><!--
-->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!--
--><languages /><!--
--></noinclude>{{#switch:<translate></translate>
| =
<includeonly>{{Languages|Module:Message box/doc}}</includeonly>
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
<!-- {{Shared Template Warning|Module:Message box}} -->
{{Used in system}}
{{module rating|r}}
{{module rating|p}}
{{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}}
{{Uses TemplateStyles
| Module:Message box/ambox.css
| Module:Message box/cmbox.css
| Module:Message box/fmbox.css
| Module:Message box/imbox.css
| Module:Message box/ombox.css
| Module:Message box/tmbox.css
}}
<translate><!--T:1--> This is a meta-module that implements the message box templates <tvar name=1>{{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|and}}{{int|lang={{TRANSLATIONLANGUAGE}}|word-separator}}<nowiki/>}}</tvar>.</translate>
<translate><!--T:2--> It is intended to be used from Lua modules, and should not be used directly from wiki pages.</translate>
<translate><!--T:3--> If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.</translate>
<translate>
== Usage == <!--T:4-->
<!--T:5-->
To use this module from another Lua module, first you need to load it.
</translate>
<syntaxhighlight lang="lua">
local messageBox = require('Module:Message box')
</syntaxhighlight>
<translate><!--T:6--> To create a message box, use the <tvar name=1><code>main</code></tvar> function.</translate>
<translate><!--T:7--> It takes two parameters:</translate>
{{Unordered list
|1=
<translate><!--T:8--> the first is the box type (as a string).</translate>
|2=
<translate><!--T:9--> the second is a table containing the message box parameters.</translate>
}}
<syntaxhighlight lang="lua">
local box = messageBox.main( boxType, {
param1 = param1,
param2 = param2,
-- <translate nowrap><!--T:10--> More parameters...</translate>
})
</syntaxhighlight>
<translate>
<!--T:11-->
There are seven available box types:
</translate>
{{(!}} class="wikitable"
! <translate><!--T:12--> Box type</translate>
! <translate><!--T:13--> Template</translate>
! <translate><!--T:14--> Purpose</translate>
{{!}}-
{{!}} <code>mbox</code>
{{!}} {{tlx|mbox}}
{{!}} <translate><!--T:15--> For message boxes to be used in multiple namespaces</translate>
{{!}}-
{{!}} <code>ambox</code>
{{!}} {{tlx|ambox}}
{{!}} <translate><!--T:16--> For article message boxes</translate>
{{!}}-
{{!}} <code>cmbox</code>
{{!}} {{tlx|cmbox}}
{{!}} <translate><!--T:17--> For category message boxes</translate>
{{!}}-
{{!}} <code>fmbox</code>
{{!}} {{tlx|fmbox}}
{{!}} <translate><!--T:18--> For interface message boxes</translate>
{{!}}-
{{!}} <code>imbox</code>
{{!}} {{tlx|imbox}}
{{!}} <translate><!--T:19--> For file namespace message boxes</translate>
{{!}}-
{{!}} <code>tmbox</code>
{{!}} {{tlx|tmbox}}
{{!}} <translate><!--T:20--> For talk page message boxes</translate>
{{!}}-
{{!}} <code>ombox</code>
{{!}} {{tlx|ombox}}
{{!}} <translate><!--T:21--> For message boxes in other namespaces</translate>
{{!)}}
<translate>
<!--T:22-->
See the template page of each box type for the available parameters.
== Usage from <tvar name=1><code>#invoke</code></tvar> == <!--T:23-->
</translate>
<translate><!--T:24--> As well as the <tvar name=1><code>main</code></tvar> function, this module has separate functions for each box type.</translate>
<translate><!--T:25--> They are accessed using the code <tvar name=1>{{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}</tvar>, <tvar name=2>{{tlc|#invoke:Message box|ambox|...}}</tvar>, etc.</translate>
<translate><!--T:26--> These will work when called from other modules, but they access code used to process arguments passed from <tvar name=1>{{tlc|#invoke:...}}</tvar>, and so calling them will be less efficient than calling <tvar name=2><code>main</code></tvar></translate>.
<translate>
== Technical details == <!--T:27-->
<!--T:28-->
The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at <tvar name=1>[[Module:Message box/configuration]]</tvar>.
</translate>
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Modules{{#translation:}}]]
}}</includeonly><noinclude>
[[Category:Module documentation pages{{#translation:}}]]
</noinclude>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}}
}}
a3ce6d93b2de5e278623d054d7a82b6a21fb5b57
Module:Message box/doc/en
828
435
1311
2023-03-18T04:11:20Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude><!--
-->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!--
--><languages /><!--
--></noinclude>{{#switch:
| =
<includeonly>{{Languages|Module:Message box/doc}}</includeonly>
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
<!-- {{Shared Template Warning|Module:Message box}} -->
{{Used in system}}
{{module rating|r}}
{{module rating|p}}
{{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}}
{{Uses TemplateStyles
| Module:Message box/ambox.css
| Module:Message box/cmbox.css
| Module:Message box/fmbox.css
| Module:Message box/imbox.css
| Module:Message box/ombox.css
| Module:Message box/tmbox.css
}}
This is a meta-module that implements the message box templates {{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang=en|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang=en|and}}{{int|lang=en|word-separator}}<nowiki/>}}.
It is intended to be used from Lua modules, and should not be used directly from wiki pages.
If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.
== Usage ==
To use this module from another Lua module, first you need to load it.
<syntaxhighlight lang="lua">
local messageBox = require('Module:Message box')
</syntaxhighlight>
To create a message box, use the <code>main</code> function.
It takes two parameters:
{{Unordered list
|1=
the first is the box type (as a string).
|2=
the second is a table containing the message box parameters.
}}
<syntaxhighlight lang="lua">
local box = messageBox.main( boxType, {
param1 = param1,
param2 = param2,
-- More parameters...
})
</syntaxhighlight>
There are seven available box types:
{{(!}} class="wikitable"
! Box type
! Template
! Purpose
{{!}}-
{{!}} <code>mbox</code>
{{!}} {{tlx|mbox}}
{{!}} For message boxes to be used in multiple namespaces
{{!}}-
{{!}} <code>ambox</code>
{{!}} {{tlx|ambox}}
{{!}} For article message boxes
{{!}}-
{{!}} <code>cmbox</code>
{{!}} {{tlx|cmbox}}
{{!}} For category message boxes
{{!}}-
{{!}} <code>fmbox</code>
{{!}} {{tlx|fmbox}}
{{!}} For interface message boxes
{{!}}-
{{!}} <code>imbox</code>
{{!}} {{tlx|imbox}}
{{!}} For file namespace message boxes
{{!}}-
{{!}} <code>tmbox</code>
{{!}} {{tlx|tmbox}}
{{!}} For talk page message boxes
{{!}}-
{{!}} <code>ombox</code>
{{!}} {{tlx|ombox}}
{{!}} For message boxes in other namespaces
{{!)}}
See the template page of each box type for the available parameters.
== Usage from <code>#invoke</code> ==
As well as the <code>main</code> function, this module has separate functions for each box type.
They are accessed using the code {{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}, {{tlc|#invoke:Message box|ambox|...}}, etc.
These will work when called from other modules, but they access code used to process arguments passed from {{tlc|#invoke:...}}, and so calling them will be less efficient than calling <code>main</code>.
== Technical details ==
The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at [[Module:Message box/configuration]].
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Modules{{#translation:}}]]
}}</includeonly><noinclude>
[[Category:Module documentation pages{{#translation:}}]]
</noinclude>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}}
}}
eb0368b68b66e7bfdf66f0fbded73f3e1a15bad8
Template:Self-reference
10
125
282
2023-03-30T11:42:06Z
wikipedia>Mclay1
0
Mclay1 moved page [[Template:Self reference]] to [[Template:Self-reference]]: grammatically correct hyphen
wikitext
text/x-wiki
{{#switch:{{{2|NONE}}}
|NONE|hatnote|hat={{Hatnote|extraclasses=plainlinks selfreference noprint|1={{{1}}}}}
|inline=<div class="plainlinks selfreference" style="display:inline; font-style: italic;"><!--Same style as class hatnote.-->{{{1}}}</div>
|<!--Matching the empty string here for unprintworthy content is for backwards compatibility with the 2006-2008 version. Do not depend on it!-->=<div style="display:inline;" class="plainlinks selfreference noprint">{{{1}}}</div>
|#default={{error|Second parameter must be <code>hatnote</code>, <code>hat</code>, or <code>inline</code>}}
}}<noinclude>
{{Documentation}}
<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES THE /doc SUBPAGE, AND INTERWIKIS TO WIKIDATA, THANKS -->
</noinclude>
0c4a08f880070e918c3edcaa50cc493f99841e98
Template:Navbox suite
10
128
288
2023-03-30T20:23:06Z
wikipedia>SuperMarioMan
0
Reverted edits by [[Special:Contribs/Dndnrmn1|Dndnrmn1]] ([[User talk:Dndnrmn1|talk]]) to last version by 2.147.31.243
wikitext
text/x-wiki
{{#invoke:sidebar|sidebar
| width = auto
| bodystyle = border-spacing:0;background:#f7f7f7;padding:2px;
| title = Navbox suite
| titlestyle = padding: 0.2em 0.8em; font-size: 145%; line-height: 1.2em; background-color: #ccf;
| contentclass = plainlist
| contentstyle = padding:0.25em;background:#fdfdfd;
| content1 =
*{{tl|Navbox}}
*{{tl|Navbox with collapsible groups}}
*{{tl|Navbox with columns}}
*{{tl|Navboxes}}
| navbarstyle = background:#fdfdfd;padding:0 5px
}}<!--
NOTE: A template MUST support all of the parameters marked with a cross in Template:Navbox/doc in order to be Navbox suite compliant.
In particular, the name, state, border, and navbar parameters are especially important.
--><noinclude>
{{Documentation|content=
Helper template for linking between main navbox templates in their documentation.
[[Category:Wikipedia-internal sidebar templates]]
[[Category:Navigational boxes|Δ]]<!-- Δ for documentation ([[WP:SORTKEY]]) -->
[[Category:Documentation see also templates]]
}}
</noinclude>
96300845706c925e4c1e1f1f511ad327cee6d0cf
Template:Selfref
10
115
260
2023-03-30T20:46:51Z
wikipedia>Xqbot
0
Bot: Fixing double redirect to [[Template:Self-reference]]
wikitext
text/x-wiki
#REDIRECT [[Template:Self-reference]]
{{Redirect category shell|
{{R from template shortcut}}
{{R from alternative spelling}}
{{R from move}}
}}
030c372ed4f83fa2e03a4c0ccdd4ad3cef8ec9e6
Template:Tag
10
40
79
2023-04-01T17:42:02Z
mw>Alex44019
0
Undo revision 5858180 by [[Special:Contributions/2A00:23C8:8232:B201:C0BA:E017:2338:8E97|2A00:23C8:8232:B201:C0BA:E017:2338:8E97]] ([[User talk:2A00:23C8:8232:B201:C0BA:E017:2338:8E97|talk]]): vandalism
wikitext
text/x-wiki
{{#if:{{{plain|}}}|
|<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}">
}}{{#switch:{{{2|pair}}}
|c|close = <!--nothing-->
|s|single
|o|open
|p|pair = {{#tag:span|‎<|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}| {{{params}}}}}
}}{{#switch:{{{2|pair}}}
|c|close = {{{content|}}}
|s|single =  {{#tag:span|/>|class="p"}}
|o|open = {{#tag:span|>|class="p"}}{{{content|}}}
|p|pair = {{#tag:span|>|class="p"}}{{{content|...}}}
}}{{#switch:{{{2|pair}}}
|s|single
|o|open = <!--nothing-->
|c|close
|p|pair = {{#tag:span|‎</|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|>|class="p"}}
}}{{#if:{{{plain|}}}|
|</code>
}}<noinclude>
{{Documentation}}
</noinclude>
88657ad7afd7844d9681f7f08ba60c75c25800a1
Template:Correct title examples
10
192
545
2023-04-03T12:48:43Z
wikipedia>Gonnym
0
wikitext
text/x-wiki
{| class="wikitable" style="background: transparent;"
|+ Title changing or correcting templates + magic word {{Navbar|Correct title examples|plain=1|brackets=y}}
|-
! scope="col" style="width: 20%;" | Wiki markup <br /><span style="font-weight: normal; font-size: 90%">[[Help:Transclusion|Transclusion]] from template:</span>
! scope="col" 40% | Involves
! scope="col" style="width: 20%;" | Correct name
! scope="col" style="width: 20%;" | Actual article name
|-
! scope="row" | {{tlp|Italic title}}
| Title in italics
| ''To Kill a Mockingbird''
| [[To Kill a Mockingbird]]
|-
! scope="row" | {{tlp|Italic title|all{{=}}yes}}
| Complete title in italics, including parentheses
| ''Randall and Hopkirk (Deceased)''
| [[Randall and Hopkirk (Deceased)]]
|-
! scope="row" | {{tlp|Italic title|string{{=}}Ally McBeal}}
| Phrase of {{para|string}} in italics
| List of ''Ally McBeal'' episodes
| [[List of Ally McBeal episodes]]
|-
! scope="row" | {{tlp|Italic title|all{{=}}yes|string{{=}}Fringe}}
| Phrase of {{para|string}} in italics; also looks in parentheses
| Peter (''Fringe'' episode)
| [[Peter (Fringe episode)]]
|-
! scope="row" | {{tlp|Italic disambiguation}}
| Disambiguation in italics
| The End (''Lost'')
| [[The End (Lost)]]
|-
! scope="row" | {{tlp|Lowercase title}}
| Lowercase first character
| eBay
| [[EBay]]
|-
! scope="row" | {{tlp|Lowercase title|italic{{=}}yes}}
| Lowercase first character and place title in italics, not including disambiguation
| ''iCarly'' (soundtrack)
| [[ICarly (soundtrack)]]
|-
! scope="row" | {{tlp|Lowercase title|italic{{=}}yes|force{{=}}yes}}
| Lowercase first character and place title in italics, including disambiguation
|
|
|-
! scope="row" | {{tlp|Lowercase title|dab{{=}}yes}}
| Lowercase first character and place disambiguation in italics
| iSpy (''Modern Family'')
| [[ISpy (Modern Family)]]
|-
! scope="row" | {{tlp|Correct title|reason{{=}}bracket}}
| [[bracket|< > [ ] { }]]
| Benzo[''a'']pyrene
| [[Benzo(a)pyrene]]
|-
! scope="row" | {{tlp|Correct title|reason{{=}}#}}
| [[Number sign|#]]
| Pilot #5 || [[Pilot No. 5]]
|-
! scope="row" | {{tlp|Correct title|reason{{=}}:}}
| [[colon (punctuation)|:]]
| DK: King of Swing
| [[DK King of Swing]]
|-
! scope="row" style="background: #EAECF1;" | <span style="font-weight: normal; font-size: 92%;">[[Help:Magic words|Magic word:]]</span>
! scope="row" colspan="3" style="background: #EAECF1;" |
|-
! scope="row" | {{[[meta:Help:Magic words#Miscellany|DISPLAYTITLE]]}}
| Various
| _NSAKEY
| [[NSAKEY]]
|}<noinclude>
{{Documentation|content=
[[Category:Correct title templates|Examples]]
}}
</noinclude>
8245a1def0c8a75905f4159317fed38f23ad7ce3
Template:TemplateData header
10
21
41
2023-04-03T20:43:41Z
mw>Clump
0
Reverted edits by [[Special:Contribs/105.113.40.185|105.113.40.185]] ([[User talk:105.113.40.185|talk]]) to last version by Kaganer
wikitext
text/x-wiki
<noinclude>
<languages/>
<onlyinclude>{{#switch:<translate></translate>
|=
<div class="templatedata-header"><!--
-->{{#if:{{yesno|{{{editlinks|}}}}}<!--
-->|{{#ifexpr:<!--
-->{{#if:{{{docpage|}}}<!--
-->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!--
-->|not{{IsDocSubpage|false=0}}<!--
-->}}<!--
-->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!--
-->}}<!--
-->}}
{{#if:{{{noheader|}}}||<translate><!--T:1--> This is the [[<tvar name=1>Special:MyLanguage/Help:TemplateData</tvar>|TemplateData]] documentation for this template used by [[<tvar name=2>Special:MyLanguage/VisualEditor</tvar>|VisualEditor]] and other tools.</translate>}}
'''{{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!--
-->|{{#if:{{IsDocSubpage|false=}}<!--
-->|[[Category:TemplateData documentation{{#translation:}}]]<!--
-->|[[Category:Templates using TemplateData{{#translation:}}]]<!--
-->}}<!--
-->}}</includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}}
}}</onlyinclude>
{{Documentation|content=
Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]].
== Usage ==
{{#tag:syntaxhighlight|
==TemplateData== or ==Parameters== or ==Usage==
{{((}}TemplateData header{{))}}
{{^(}}templatedata{{)^}}{
...
}{{^(}}/templatedata{{)^}}
|lang=html
}}
Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]].
<dl><dd>
{{TemplateData header|Template name}}
</dd></dl>
Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text.
<dl><dd>
{{TemplateData header|noheader=1}}
</dd></dl>
==Parameters==
{{TemplateData header/doc}}
}}
</noinclude>
adcf50c8d3c870a44b190116c53a975926dc17d8
Module:Message box/ambox.css
828
436
1313
2023-04-04T14:02:42Z
mw>Waldyrious
0
fix table width in narrow screens
sanitized-css
text/css
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid #a2a9b1;
/* Default "notice" blue */
border-left: 10px solid #36c;
background-color: #fbfbfb;
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: #36c;
}
table.ambox-speedy {
/* Pink */
background-color: #fee7e6;
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: #b32424;
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: #a2a9b1;
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
095fcb9be9e02488b74d8093dc30d52fabe48ddd
Template:Collapse top
10
150
347
2023-04-07T02:02:13Z
wikipedia>Izno
0
per tech news
wikitext
text/x-wiki
<div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section -->
{| <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;"
|-
! style="background: {{{bg|#{{main other|F0F2F5|CCFFCC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div>
{{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}}
|{{<includeonly>safesubst:</includeonly>!}}-
{{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }}
|-
| style="border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|White}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude>
{{lorem ipsum|3}}
{{Collapse bottom}}
{{Documentation}}
</noinclude>
247cc43d5198baf8804d0926529cbbdd7be91113
Template:High-risk
10
197
556
2023-04-09T16:46:44Z
wikipedia>Nagsb
0
wikitext
text/x-wiki
#REDIRECT [[Template:High-use]]
{{Rcat shell|
{{R with Wikidata item}}
{{R from merge}}
{{R from template shortcut}}
}}
52c9a8c75748fd2b20183ed6c60e1f3c3a435cc9
Template:Navigation templates
10
133
298
2023-04-10T07:21:54Z
wikipedia>John of Reading
0
Reverted 1 edit by [[Special:Contributions/Dndnrmn2|Dndnrmn2]] ([[User talk:Dndnrmn2|talk]]): Test edit (?)
wikitext
text/x-wiki
{| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;"
|+ Navigation templates comparison {{Navbar|Navigation templates|plain=1|brackets=y}}
|-
! Template
! Collapsible !! Header color
! Image !! Groups !! Style (body) <br /> parameter/s
|-
| style="text-align: left;" | {{tl|Navbox}}
| collapsible || style="background: #ccf;" | navbox
| Left/right of body || Yes || Yes
|-
| style="text-align: left;" | {{tl|Navbox with collapsible groups}}
| collapsible || style="background: #ccf;" | navbox
| Left/right of body and/or in each list || Yes || Yes
|-
| style="text-align: left;" | {{tl|Navbox with columns}}
| collapsible || style="background: #ccf;" | navbox
| Left/right of columns || No || Yes
|}
{| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;"
|+ Collapsible attributes
|-
! Type !! CSS classes !! JavaScript !! Collapses when !! Custom <br /> initial state !! Nesting
|-
| style="text-align:left;" | [[Help:Collapsing|Collapsible tables]]
| mw-collapsible
| Defined in [[MediaWiki:Common.js|Common.js]]
| 2 or more autocollapse on page || Yes || Yes
|}<noinclude>
[[Category:Navigational boxes|Δ]]
[[Category:Documentation shared content templates]]</noinclude>
64df85f0aa0ebaa7b3cbfa4c05af256a71c18c39
Template:Localized link
10
405
1243
2023-04-12T05:04:44Z
mw>Dinoguy1000
0
fix per comment in last-mentioned thread
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><!--
-->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|<b>
}}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }}
}}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }}
}}
<!--if the translation page does not exist (or called from the source page), output as is-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{{1}}}}}
|{{PAGENAME:{{{1}}}}}
|{{{1}}}
}}
|{{{1}}}
}}
}}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|</b>
}}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude>
{{documentation|content=
{{tsh|ll|LL}}
{{High-use|35000}}
<translate>
== Purpose == <!--T:1-->
</translate>
<translate><!--T:8--> This helper template can be used to link to [[<tvar name=1>Special:LanguageStats</tvar>|translatable pages]] in the user's language.</translate>
<translate><!--T:9--> It uses the special page prefix <tvar name=1><code>Special:MyLanguage/</code></tvar>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't.</translate>
<translate>
<!--T:10-->
It should be used in translated pages, so that they link to the right page even if there is no translated page in that language.
== Usage == <!--T:2-->
</translate>
{{Localized link/doc}}
<translate>
<!--T:11-->
If "<tvar name=1><code>nsp</code></tvar>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<tvar name=1><code>nsp</code></tvar>" parameter is defined by any value — link text displays the short pagename, without namespace.
=== Examples of simple usage === <!--T:3-->
</translate>
{{(}}{{!}} class="wikitable"
{{!}}-
! <translate><!--T:4--> Use</translate>
! <translate><!--T:5--> Becomes</translate>
{{!}}-
{{!}} {{Tlx|ll|Communication}}
{{!}} {{ll|Communication}}
{{!}}-
{{!}} {{Tlx|ll|Communication|コミュニケーション}}
{{!}} {{ll|Communication|コミュニケーション}}
{{!}}-
{{!}} {{Tlx|ll|Project:About}}
{{!}} {{ll|Project:About}}
{{!}}-
{{!}} {{Tlx|ll|Project:About|nsp{{=}}0}}
{{!}} {{ll|Project:About|nsp=0}}
{{!}}{{)}}
<translate>
== Usage in translatable pages == <!--T:6-->
<!--T:12-->
On pages prepared for translation with the <tvar name=1>{{ll|Extension:Translate|nsp=0}}</tvar> extension, this template may be used in three ways.
</translate>
# <translate><!--T:13--> Should better be substitute this template, and then the wikilink target embedded in a <tvar name=1>{{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>, separately from the translatable displayed text of the link.</translate>
#: <translate><!--T:22--> As example, instead <tvar name=1><code><nowiki>{{ll|Communication|About communication}}</nowiki></code></tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}</tvar>.</translate>
# <translate><!--T:14--> Alternatively, may be exclude this code from translatable section.</translate>
#: <translate><!--T:23--> As example, for <tvar name=1><code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code></tvar>, translation markup in translatable page will be:</translate>
#: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}}
#: <translate><!--T:15--> This is useful for bulleted lists of links, e.g. in the "See also:" sections.</translate>
# <translate><!--T:16--> If link text does not have to be different from the name of landing page, will be better to embed all this code into <tvar name=1>{{tag|tvar|open}}</tvar>.</translate>
#: <translate><!--T:24--> As example, instead <tvar name=1>{{Tlx|ll|Communication}}</tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>.</translate>
<translate>
== See also == <!--T:7-->
</translate>
* [[Template:Localized link/messagedoc]] — <translate><!--T:17--> should be used for message documentation in translatable pages that use this template.</translate>
* {{tl|Translatable template}} - <translate><!--T:18--> alias <tvar name=1>{{tl|TNT}}</tvar> or <tvar name=2>{{tl|tnt}}</tvar></translate>
* {{tl|Translatable template name}} - <translate><!--T:19--> alias <tvar name=1>{{tl|TNTN}}</tvar> or <tvar name=2>{{tl|tntn}}</tvar></translate>
* {{tl|Page language link}} - <translate><!--T:20--> alias <tvar name=1>{{tl|pll}}</tvar></translate> - <translate><!--T:21--> add a link from a translatable page to another translatable page in the same language</translate>
}}
[[Category:Internationalization templates]]
</noinclude>
26f0ea08ccb53748f8a9c69c65e96d99b1db2575
Template:Localized link/en
10
409
1253
2023-04-12T12:58:49Z
mw>FuzzyBot
0
Updating to match new version of source page
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><!--
-->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|<b>
}}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }}
}}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }}
}}
<!--if the translation page does not exist (or called from the source page), output as is-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{{1}}}}}
|{{PAGENAME:{{{1}}}}}
|{{{1}}}
}}
|{{{1}}}
}}
}}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|</b>
}}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude>
{{documentation|content=
{{tsh|ll|LL}}
{{High-use|35000}}
== Purpose ==
This helper template can be used to link to [[Special:LanguageStats|translatable pages]] in the user's language.
It uses the special page prefix <code>Special:MyLanguage/</code>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't.
It should be used in translated pages, so that they link to the right page even if there is no translated page in that language.
== Usage ==
{{Localized link/doc}}
If "<code>nsp</code>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<code>nsp</code>" parameter is defined by any value — link text displays the short pagename, without namespace.
=== Examples of simple usage ===
{{(}}{{!}} class="wikitable"
{{!}}-
! Use
! Becomes
{{!}}-
{{!}} {{Tlx|ll|Communication}}
{{!}} {{ll|Communication}}
{{!}}-
{{!}} {{Tlx|ll|Communication|コミュニケーション}}
{{!}} {{ll|Communication|コミュニケーション}}
{{!}}-
{{!}} {{Tlx|ll|Project:About}}
{{!}} {{ll|Project:About}}
{{!}}-
{{!}} {{Tlx|ll|Project:About|nsp{{=}}0}}
{{!}} {{ll|Project:About|nsp=0}}
{{!}}{{)}}
== Usage in translatable pages ==
On pages prepared for translation with the {{ll|Extension:Translate|nsp=0}} extension, this template may be used in three ways.
# Should better be substitute this template, and then the wikilink target embedded in a {{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}, separately from the translatable displayed text of the link.
#: As example, instead <code><nowiki>{{ll|Communication|About communication}}</nowiki></code>, translation markup in translatable page will be {{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}.
# Alternatively, may be exclude this code from translatable section.
#: As example, for <code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code>, translation markup in translatable page will be:
#: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}}
#: This is useful for bulleted lists of links, e.g. in the "See also:" sections.
# If link text does not have to be different from the name of landing page, will be better to embed all this code into {{tag|tvar|open}}.
#: As example, instead {{Tlx|ll|Communication}}, translation markup in translatable page will be {{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}.
== See also ==
* [[Template:Localized link/messagedoc]] — should be used for message documentation in translatable pages that use this template.
* {{tl|Translatable template}} - alias {{tl|TNT}} or {{tl|tnt}}
* {{tl|Translatable template name}} - alias {{tl|TNTN}} or {{tl|tntn}}
* {{tl|Page language link}} - alias {{tl|pll}} - add a link from a translatable page to another translatable page in the same language
}}
[[Category:Internationalization templates]]
</noinclude>
9e7370c695bb1a61b15996006b40f9e437acbba4
Template:Documentation subpage
10
18
35
2023-04-13T02:50:05Z
mw>~aanzx
0
Reverted 1 edit by [[Special:Contributions/2409:4081:889C:D4F2:72B4:BEFE:C5E0:CD1|2409:4081:889C:D4F2:72B4:BEFE:C5E0:CD1]] ([[User talk:2409:4081:889C:D4F2:72B4:BEFE:C5E0:CD1|talk]])(TwinkleGlobal)
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude>{{#switch:<translate></translate>
| =
<includeonly><!--
-->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]]
| text =
'''<translate><!--T:4--> This is a [[w:Wikipedia:Template documentation|documentation]] [[<tvar name=2>Special:MyLanguage/Help:Subpages</tvar>|subpage]] for <tvar name=1>{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}</tvar>.</translate>'''<br /><!--
-->{{#if:{{{text2|}}}{{{text1|}}}
|<translate><!--T:5--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{{text2|{{{text1}}}}}}</tvar>.</translate>
|<translate><!--T:10--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{SUBJECTSPACE}}</tvar> page.</translate>
}}
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}}
| Template | Project = Template
| Module = Module
| User = User
| #default = MediaWiki
}} documentation pages{{#translation:}}]]
| [[Category:Documentation subpages without corresponding pages{{#translation:}}]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{Documentation|content=
<translate>
== Usage == <!--T:6-->
<!--T:7-->
Use this template on Template Documentation subpage (/doc).
== See also == <!--T:8-->
</translate>
*{{tl|Documentation}}
*{{tl|tl}}
}}
</noinclude>
0d6a10a903dbd572fffeb01aff5983d9b3abc65c
254
35
2023-04-29T17:27:17Z
wikipedia>Paine Ellsworth
0
m
wikitext
text/x-wiki
<includeonly><!--
-->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:Edit-copy green.svg|40px|alt=|link=]]
| text =
{{strong|This is a [[Wikipedia:Template documentation|documentation]] [[Wikipedia:Subpages|subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}<br />It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}.
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]
| [[Category:Documentation subpages without corresponding pages]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly><noinclude>{{Documentation}}</noinclude>
41ca90af0945442788a2dbd08c8c54a61a23c057
Module:Tree chart/data
828
210
598
2023-04-16T22:01:57Z
wikipedia>GoldRingChip
0
X2
Scribunto
text/plain
local SLD = '1px solid black'
local DSH = '1px dashed black'
local DOT = '1px dotted black'
local data = {
['!'] = {
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['%'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
["'"] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['('] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
[')'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['*'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['+'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
[','] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['-'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['.'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['7'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
[':'] = {
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['A'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['C'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['D'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['E'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['F'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['G'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['G2'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['H'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['J'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['K'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['L'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['M'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['P'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['Q'] = {
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['R'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['S'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['T3'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['T2'] = {
b = { { style ={ ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['T'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['U'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['V'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
},
['W'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['X'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['X2'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['Y'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['Z'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['^'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['$'] = {
t = { { attr = { colspan = '2', rowspan = '2'}, style = { width = '2em', height = '2em' } } }
},
['`'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['a2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['a'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['b2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['b3'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['b'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['c'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['d'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['di'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['dj'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['e'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['f'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['fh'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] =DSH, width = '1em', height = '1em' } } }
},
['fy'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['h'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['he'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['i'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['ic'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['j'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['jc'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['k2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['k3'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['k'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['kq'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['kr'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['kq2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['kr2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['l2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['l3'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['l4'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['l'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['m2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['m'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['mp'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['mp2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['n2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['n'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['np'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['np2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['o2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['o'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['om'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['om2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['on'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['on2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['p2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['p'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['q2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['q'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['ql'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['ql2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] =DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['r2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
},
['r'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['rl'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['rl2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['t'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['v'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['x'] = {},
['y'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
},
['ye'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['~'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
}
}
local retval = {}
for k,v in pairs(data) do
retval[k] = {}
for k2,v2 in pairs(v) do
local renderedCells = mw.html.create()
for k3,v3 in ipairs(v2) do
renderedCells:tag('td'):css(v3.style or {}):attr(v3.attr or {})
end
retval[k][k2] = tostring(renderedCells)
end
end
return retval
872003fd8ebaf82fdff91a68b5505e5ee25ae350
Template:Tree chart/doc
10
215
608
2023-04-26T13:09:46Z
wikipedia>GoldRingChip
0
{{large}} (via [[WP:JWB]])
wikitext
text/x-wiki
{{Lua|Module:Tree chart}}
{{distinguish|Template:Graph:Chart}}<noinclude>
{{documentation subpage}}</noinclude><!--PLEASE ADD METADATA TO THE <includeonly> SECTION AT THE BOTTOM OF THIS PAGE
↓↓↓ EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE ↓↓↓-->
==Usage==
This template produces one row in a "family tree"-like chart consisting of boxes and connecting lines based loosely on an [[ASCII art]]-like syntax. It is meant to be used in conjunction with {{tl|Tree chart/start}} and {{tl|Tree chart/end}}. The chart is displayed as [[HTML]] tables using [[Cascading Style Sheets|CSS]] attributes, and may contain arbitrary [[wiki markup]] within the boxes. This implementation was based on the now-deprecated {{tl|family tree}} template.
==Basic example==
This code:
<syntaxhighlight lang="wikitext">
{{Tree chart/start|align=center|summary=An example family tree}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
</syntaxhighlight>
produces this:
{{Tree chart/start|align=center|summary=An example family tree}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad;
and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy. The code above produces a table of size 9 rows x 18 columns as shown below.
[[File:Chart template table structure.png|center|500px|The table structure created using the example above]]
==Collapsible basic example==
This code uses {{tl|chart top}}:
<syntaxhighlight lang="wikitext">
{{chart top|An example family tree}}
{{Tree chart/start|align=center}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
{{chart bottom}}
</syntaxhighlight>
produces this:
{{chart top|An example family tree}}
{{Tree chart/start|align=center}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
{{chart bottom}}
This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad;
and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy.
==Parameters==
The template accepts any number of unnamed parameters with each parameter specifying a '''tile''' or a '''box'''.
* '''Boxes''' can contain arbitrary [[wiki markup]]. The content of each box is specified using additional named parameters appended to the template call. Each box is '''three tiles wide''' and normally has a black border two pixels wide. Boxes can have any name that is a valid template parameter name, subject to a minimum of two alphabetical characters.
* '''Tiles''' are line drawing symbols used to connect the boxes. They consist of various styles of horizontal and vertical lines along with corners and crossings as needed. Tiles are specified using their one- or two-character name: for the most common tiles, that character is more or less approximate to the tile's appearance. A special case of a tile is the '''empty tile''', specified by a single space character. A table of available tiles is given below.
{| style="float: left; margin-left: 1em;"
|+ '''Solid lines:'''
|-
| {{large|<code>!</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|!}}{{Tree chart/end}} ||
| {{large|<code>,</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|,}}{{Tree chart/end}} ||
| {{large|<code>v</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|v}}{{Tree chart/end}} ||
| {{large|<code>.</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|.}}{{Tree chart/end}} ||
|-
| {{large|<code>-</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|-}}{{Tree chart/end}} ||
| {{large|<code>)</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|)}}{{Tree chart/end}} ||
| {{large|<code>+</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|+}}{{Tree chart/end}} ||
| {{large|<code>(</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|(}}{{Tree chart/end}} ||
|-
| || ||
| {{large|<code>`</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|`}}{{Tree chart/end}} ||
| {{large|<code>^</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|^}}{{Tree chart/end}} ||
| {{large|<code>'</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|'}}{{Tree chart/end}} ||
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dashed lines:'''
|-
| {{large|<code>:</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|:}}{{Tree chart/end}} ||
| {{large|<code>F</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|F}}{{Tree chart/end}} ||
| {{large|<code>V</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|V}}{{Tree chart/end}} ||
| {{large|<code>7</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|7}}{{Tree chart/end}} ||
|-
| {{large|<code>~</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|~}}{{Tree chart/end}} ||
| {{large|<code>D</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|D}}{{Tree chart/end}} ||
| {{large|<code>%</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|%}}{{Tree chart/end}} ||
| {{large|<code>C</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|C}}{{Tree chart/end}} ||
|-
| || ||
| {{large|<code>L</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|L}}{{Tree chart/end}} ||
| {{large|<code>A</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|A}}{{Tree chart/end}} ||
| {{large|<code>J</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|J}}{{Tree chart/end}} ||
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dotted lines:'''
|-
| {{large|<code>Q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Q}}{{Tree chart/end}} ||
| {{large|<code>S</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|S}}{{Tree chart/end}} ||
| {{large|<code>M</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|M}}{{Tree chart/end}} ||
| {{large|<code>T</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|T}}{{Tree chart/end}} ||
|-
| {{large|<code>P</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|P}}{{Tree chart/end}} ||
| {{large|<code>H</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|H}}{{Tree chart/end}} ||
| {{large|<code>R</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|R}}{{Tree chart/end}} ||
| {{large|<code>G</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|G}}{{Tree chart/end}} ||
|-
| || ||
| {{large|<code>Y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Y}}{{Tree chart/end}} ||
| {{large|<code>W</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|W}}{{Tree chart/end}} ||
| {{large|<code>Z</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Z}}{{Tree chart/end}} ||
|}
{| style="float: left; margin-left: 1em;"
|+'''Dashes hrzntl solid vrtcl:'''
| {{large|<code>fy</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fy}}{{Tree chart/end}}
| {{large|<code>y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|y}}{{Tree chart/end}}
| {{large|<code>ye</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ye}}{{Tree chart/end}}
|-
| {{large|<code>f</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|f}}{{Tree chart/end}}
| {{large|<code>t</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|t}}{{Tree chart/end}}
| {{large|<code>e</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|e}}{{Tree chart/end}}
|-
| {{large|<code>fh</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fh}}{{Tree chart/end}}
| {{large|<code>h</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|h}}{{Tree chart/end}}
| {{large|<code>he</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|he}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Solid hrzntl dashes vrtcl:'''
| {{large|<code>dj</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|dj}}{{Tree chart/end}}
| {{large|<code>j</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|j}}{{Tree chart/end}}
| {{large|<code>jc</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|jc}}{{Tree chart/end}}
|-
| {{large|<code>d</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|d}}{{Tree chart/end}}
| {{large|<code>*</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|*}}{{Tree chart/end}}
| {{large|<code>c</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|c}}{{Tree chart/end}}
|-
| {{large|<code>di</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|di}}{{Tree chart/end}}
| {{large|<code>i</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|i}}{{Tree chart/end}}
| {{large|<code>ic</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ic}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+'''Solid hrzntl dot vrtcl:'''
| {{large|<code>kr</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr}}{{Tree chart/end}}
| {{large|<code>r</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r}}{{Tree chart/end}}
| {{large|<code>rl</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl}}{{Tree chart/end}}
|-
| {{large|<code>k</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k}}{{Tree chart/end}}
| {{large|<code>a</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a}}{{Tree chart/end}}
| {{large|<code>l</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l}}{{Tree chart/end}}
|-
| {{large|<code>kq</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq}}{{Tree chart/end}}
| {{large|<code>q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q}}{{Tree chart/end}}
| {{large|<code>ql</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dashed hrzntl dot vrtcl:'''
| {{large|<code>kr2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr2}}{{Tree chart/end}}
| {{large|<code>r2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r2}}{{Tree chart/end}}
| {{large|<code>rl2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl2}}{{Tree chart/end}}
|-
| {{large|<code>k2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k2}}{{Tree chart/end}}
| {{large|<code>a2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a2}}{{Tree chart/end}}
| {{large|<code>l2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l2}}{{Tree chart/end}}
|-
|{{large|<code>kq2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq2}}{{Tree chart/end}}
| {{large|<code>q2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q2}}{{Tree chart/end}}
| {{large|<code>ql2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql2}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dots hrzntl solid vrtcl:'''
| {{large|<code>om</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om}}{{Tree chart/end}}
| {{large|<code>m</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m}}{{Tree chart/end}}
| {{large|<code>mp</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp}}{{Tree chart/end}}
|-
| {{large|<code>o</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o}}{{Tree chart/end}}
| {{large|<code>b</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b}}{{Tree chart/end}}
| {{large|<code>p</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p}}{{Tree chart/end}}
|-
| {{large|<code>on</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on}}{{Tree chart/end}}
| {{large|<code>n</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n}}{{Tree chart/end}}
| {{large|<code>np</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dots hrzntl dashes vrtcl:'''
| {{large|<code>om2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om2}}{{Tree chart/end}}
| {{large|<code>m2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m2}}{{Tree chart/end}}
| {{large|<code>mp2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp2}}{{Tree chart/end}}
|-
| {{large|<code>o2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o2}}{{Tree chart/end}}
| {{large|<code>b2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b2}}{{Tree chart/end}}
| {{large|<code>p2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p2}}{{Tree chart/end}}
|-
| {{large|<code>on2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on2}}{{Tree chart/end}}
| {{large|<code>n2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n2}}{{Tree chart/end}}
| {{large|<code>np2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np2}}{{Tree chart/end}}
|}
{{clear}}
{|
|+ '''Miscellaneous''' (grey background not available in, or changed from, familytree):<!-- This subset is an insufficient set or questionable, but some map onto tiles that exist in {{familytree}}: -->
|-
| {{large|<code>k3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|k3}}{{Tree chart/end}}
| {{large|<code>T2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|T2}}{{Tree chart/end}}
| {{large|<code>l3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l3}}{{Tree chart/end}}
| {{large|<code>l4</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l4}}{{Tree chart/end}}
|-
| {{large|<code>G2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|G2}}{{Tree chart/end}}
| ||
| ||
| {{large|<code>b3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|b3}}{{Tree chart/end}}
|-
| {{large|<code>E</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|E}}{{Tree chart/end}}
| {{large|<code>K</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|K}}{{Tree chart/end}}
| ||
| {{large|<code>U</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|U}}{{Tree chart/end}}
|-
| {{large|<code>X</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X}}{{Tree chart/end}}
| {{large|<code>X2</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X2}}{{Tree chart/end}}
| ||
| ||
|}
==Style attributes==
The appearance of the boxes in a row may be controlled by the following optional template parameters:
* ''border'' specifies the width of the box border in pixels,
* ''boxstyle'' can be used to append arbitrary [[Cascading Style Sheets|CSS]] declarations directly to the box style attributes. For example, the following code:
<syntaxhighlight lang="wikitext">
{{Tree chart/start}}
{{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}}
{{Tree chart| | |,|-|^|-|.| | }}
{{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}}
{{Tree chart/end}}
</syntaxhighlight>
produces this chart:
{{Tree chart/start}}
{{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}}
{{Tree chart| | |,|-|^|-|.| | }}
{{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}}
{{Tree chart/end}}
Style attributes can even be set for individual boxes within each row, as in the example below:
<syntaxhighlight lang="wikitext">
{{Tree chart/start}}
{{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}}
{{Tree chart| |,|-|-|'|!|`|-|-|.| }}
{{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box
|boxstyle_RED =color:white; background-color: red;
|boxstyle_GREEN=color:yellow; background-color: green;
|boxstyle_BLUE =color:white; background-color: blue;
}}
{{Tree chart/end}}
</syntaxhighlight>
which produces this:
{{Tree chart/start}}
{{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}}
{{Tree chart| |,|-|-|'|!|`|-|-|.| }}
{{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box
|boxstyle_RED =color:white; background-color: red;
|boxstyle_GREEN=color:yellow; background-color: green;
|boxstyle_BLUE =color:white; background-color: blue;
}}
{{Tree chart/end}}
{{Warnsign|'''Note:'''}} When specifying style attributes for individual named boxes, make sure the box names are aligned to the '''left''' side of the area reserved for them in the template call (as in "<code>|RED |</code>" instead of "<code>| RED |</code>" in the example above), otherwise the template will end up looking for a style parameter with spaces in its name.
The {{tl|Tree chart/start}} template also accepts an optional {{para|style}} parameter that can be used to set CSS styles for the entire diagram, and an optional {{para|align}} parameter to set the chart alignment.
== See also ==
* [[Help:Family trees]] for other methods.
* [[User:Daduxing/familytree.js|familytree.js]], a tool for the easy creation or updating of diagrams using these templates.
* [[:Category:Family tree templates]]
* [[Template:Nerva–Antonine family tree]], a large example.
* [[Template:Tree list]]
* [[Template:Ahnentafel]]
{{Template:Graph, chart and plot templates}}
<includeonly>{{Sandbox other|
| {{When on user page | |
<!-- Categories below this line, please:-->
[[Category:Chart formatting templates| ]]
[[Category:Graph, chart and plot templates]]
[[Category:Genealogy formatting templates]]
[[Category:Templates with partial table wikitext]]
}} }}</includeonly>
4a820df0fef291101e336a1af6ecf39a8c1ac3f2
Module:Protection banner/config
828
98
212
2023-05-08T11:41:01Z
wikipedia>Fayenatic london
0
Update categories from "fully-protected" to "fully protected", removing hyphen, per valid request at [[WP:CFDS]]
Scribunto
text/plain
-- This module provides configuration data for [[Module:Protection banner]].
return {
--------------------------------------------------------------------------------
--
-- BANNER DATA
--
--------------------------------------------------------------------------------
--[[
-- Banner data consists of six fields:
-- * text - the main protection text that appears at the top of protection
-- banners.
-- * explanation - the text that appears below the main protection text, used
-- to explain the details of the protection.
-- * tooltip - the tooltip text you see when you move the mouse over a small
-- padlock icon.
-- * link - the page that the small padlock icon links to.
-- * alt - the alt text for the small padlock icon. This is also used as tooltip
-- text for the large protection banners.
-- * image - the padlock image used in both protection banners and small padlock
-- icons.
--
-- The module checks in three separate tables to find a value for each field.
-- First it checks the banners table, which has values specific to the reason
-- for the page being protected. Then the module checks the defaultBanners
-- table, which has values specific to each protection level. Finally, the
-- module checks the masterBanner table, which holds data for protection
-- templates to use if no data has been found in the previous two tables.
--
-- The values in the banner data can take parameters. These are specified
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name
-- enclosed in curly braces).
--
-- Available parameters:
--
-- ${CURRENTVERSION} - a link to the page history or the move log, with the
-- display message "current-version-edit-display" or
-- "current-version-move-display".
--
-- ${EDITREQUEST} - a link to create an edit request for the current page.
--
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes
-- on the talk page; you may submit a request to ask an administrator to make
-- an edit if it is minor or supported by consensus."
--
-- ${IMAGELINK} - a link to set the image to, depending on the protection
-- action and protection level.
--
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry
-- is set. E.g. "Editing of this page by new or unregistered users is currently
-- disabled until dd Month YYYY."
--
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation
-- so that it can be used in run-on sentences.
--
-- ${PAGETYPE} - the type of the page, e.g. "article" or "template".
-- Defined in the cfg.pagetypes table.
--
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.
-- "Editing of this page by new or unregistered users is currently disabled"
--
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the
-- template.
--
-- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or
-- "semi-protected".
--
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,
-- depending on the protection action.
--
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links
-- straight to that talk page section.
--
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to
-- create a blurb like "This template is semi-protected", or "This article is
-- move-protected until DD Month YYYY".
--
-- ${VANDAL} - links for the specified username (or the root page name)
-- using Module:Vandal-m.
--
-- Functions
--
-- For advanced users, it is possible to use Lua functions instead of strings
-- in the banner config tables. Using functions gives flexibility that is not
-- possible just by using parameters. Functions take two arguments, the
-- protection object and the template arguments, and they must output a string.
--
-- For example:
--
-- text = function (protectionObj, args)
-- if protectionObj.level == 'autoconfirmed' then
-- return 'foo'
-- else
-- return 'bar'
-- end
-- end
--
-- Some protection object properties and methods that may be useful:
-- protectionObj.action - the protection action
-- protectionObj.level - the protection level
-- protectionObj.reason - the protection reason
-- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set
-- to indefinite, and the protection time in unix time if temporary.
-- protectionObj.protectionDate - the protection date in unix time, or nil if
-- unspecified.
-- protectionObj.bannerConfig - the banner config found by the module. Beware
-- of editing the config field used by the function, as it could create an
-- infinite loop.
-- protectionObj:isProtected - returns a boolean showing whether the page is
-- protected.
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is
-- temporary.
-- protectionObj:isIncorrect - returns a boolean showing whether the protection
-- template is incorrect.
--]]
-- The master banner data, used if no values have been found in banners or
-- defaultBanners.
masterBanner = {
text = '${INTROBLURB}',
explanation = '${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPBLURB}',
link = '${IMAGELINK}',
alt = 'Page ${PROTECTIONLEVEL}'
},
-- The default banner data. This holds banner data for different protection
-- levels.
-- *required* - this table needs edit, move, autoreview and upload subtables.
defaultBanners = {
edit = {},
move = {},
autoreview = {
default = {
alt = 'Page protected with pending changes',
tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',
image = 'Pending-protection-shackle.svg'
}
},
upload = {}
},
-- The banner data. This holds banner data for different protection reasons.
-- In fact, the reasons specified in this table control which reasons are
-- valid inputs to the first positional parameter.
--
-- There is also a non-standard "description" field that can be used for items
-- in this table. This is a description of the protection reason for use in the
-- module documentation.
--
-- *required* - this table needs edit, move, autoreview and upload subtables.
banners = {
edit = {
blp = {
description = 'For pages protected to promote compliance with the'
.. ' [[Wikipedia:Biographies of living persons'
.. '|biographies of living persons]] policy',
text = '${INTROFRAGMENT} to promote compliance with'
.. ' [[Wikipedia:Biographies of living persons'
.. "|Wikipedia's policy on the biographies"
.. ' of living people]].',
tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on'
.. ' biographies of living persons',
},
dmca = {
description = 'For pages protected by the Wikimedia Foundation'
.. ' due to [[Digital Millennium Copyright Act]] takedown requests',
explanation = function (protectionObj, args)
local ret = 'Pursuant to a rights owner notice under the Digital'
.. ' Millennium Copyright Act (DMCA) regarding some content'
.. ' in this article, the Wikimedia Foundation acted under'
.. ' applicable law and took down and restricted the content'
.. ' in question.'
if args.notice then
ret = ret .. ' A copy of the received notice can be found here: '
.. args.notice .. '.'
end
ret = ret .. ' For more information, including websites discussing'
.. ' how to file a counter-notice, please see'
.. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}."
.. "'''Do not remove this template from the article until the"
.. " restrictions are withdrawn'''."
return ret
end,
image = 'Office-protection-shackle.svg',
},
dispute = {
description = 'For pages protected due to editing disputes',
text = function (protectionObj, args)
-- Find the value of "disputes".
local display = 'disputes'
local disputes
if args.section then
disputes = string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[protectionObj.title.namespace].talk.name,
protectionObj.title.text,
args.section,
display
)
else
disputes = display
end
-- Make the blurb, depending on the expiry.
local msg
if type(protectionObj.expiry) == 'number' then
msg = '${INTROFRAGMENT} or until editing %s have been resolved.'
else
msg = '${INTROFRAGMENT} until editing %s have been resolved.'
end
return string.format(msg, disputes)
end,
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPFRAGMENT} due to editing disputes',
},
ecp = {
description = 'For articles in topic areas authorized by'
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] or'
.. ' meets the criteria for community use',
tooltip = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
alt = 'Extended-protected ${PAGETYPE}',
},
mainpage = {
description = 'For pages protected for being displayed on the [[Main Page]]',
text = 'This file is currently'
.. ' [[Wikipedia:This page is protected|protected]] from'
.. ' editing because it is currently or will soon be displayed'
.. ' on the [[Main Page]].',
explanation = 'Images on the Main Page are protected due to their high'
.. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.'
.. '<br /><span style="font-size:90%;">'
.. "'''Administrators:''' Once this image is definitely off the Main Page,"
.. ' please unprotect this file, or reduce to semi-protection,'
.. ' as appropriate.</span>',
},
office = {
description = 'For pages protected by the Wikimedia Foundation',
text = function (protectionObj, args)
local ret = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.'
if protectionObj.protectionDate then
ret = ret .. ' It has been protected since ${PROTECTIONDATE}.'
end
return ret
end,
explanation = "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not remove protection from this"
.. " page unless you are authorized by the Wikimedia Foundation to do"
.. " so.'''",
image = 'Office-protection-shackle.svg',
},
reset = {
description = 'For pages protected by the Wikimedia Foundation and'
.. ' "reset" to a bare-bones version',
text = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.protectionDate then
ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was'
else
ret = ret .. 'This ${PAGETYPE} has been'
end
ret = ret .. ' reduced to a'
.. ' simplified, "bare bones" version so that it may be completely'
.. ' rewritten to ensure it meets the policies of'
.. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].'
.. ' Standard Wikipedia policies will apply to its rewriting—which'
.. ' will eventually be open to all editors—and will be strictly'
.. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while'
.. ' it is being rebuilt.\n\n'
.. 'Any insertion of material directly from'
.. ' pre-protection revisions of the ${PAGETYPE} will be removed, as'
.. ' will any material added to the ${PAGETYPE} that is not properly'
.. ' sourced. The associated talk page(s) were also cleared on the'
.. " same date.\n\n"
.. "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not override"
.. " this action, and do not remove protection from this page,"
.. " unless you are authorized by the Wikimedia Foundation"
.. " to do so. No editor may remove this notice.'''"
return ret
end,
image = 'Office-protection-shackle.svg',
},
sock = {
description = 'For pages protected due to'
.. ' [[Wikipedia:Sock puppetry|sock puppetry]]',
text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of'
.. ' [[Wikipedia:Blocking policy|blocked]] or'
.. ' [[Wikipedia:Banning policy|banned users]]'
.. ' from editing it.',
tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from'
.. ' editing it',
},
template = {
description = 'For [[Wikipedia:High-risk templates|high-risk]]'
.. ' templates and Lua modules',
text = 'This is a permanently [[Help:Protection|protected]] ${PAGETYPE},'
.. ' as it is [[Wikipedia:High-risk templates|high-risk]].',
explanation = 'Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] or'
.. ' [[Wikipedia:Template editor|template editor]] to make an edit if'
.. ' it is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by'
.. ' [[Wikipedia:Consensus|consensus]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}'
.. ' to prevent vandalism',
alt = 'Permanently protected ${PAGETYPE}',
},
usertalk = {
description = 'For pages protected against disruptive edits by a'
.. ' particular user',
text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,'
.. ' such as abusing the'
.. ' {{[[Template:unblock|unblock]]}} template.',
explanation = 'If you cannot edit this user talk page and you need to'
.. ' make a change or leave a message, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for edits to a protected page'
.. '|request an edit]],'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]],'
.. ' [[Special:Userlogin|log in]],'
.. ' or [[Special:UserLogin/signup|create an account]].',
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism|vandalism]]',
text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.level == 'sysop' then
ret = ret .. "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. '
end
return ret .. '${EXPLANATIONBLURB}'
end,
tooltip = '${TOOLTIPFRAGMENT} due to vandalism',
}
},
move = {
dispute = {
description = 'For pages protected against page moves due to'
.. ' disputes over the page title',
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
image = 'Move-protection-shackle.svg'
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism#Page-move vandalism'
.. ' |page-move vandalism]]'
}
},
autoreview = {},
upload = {}
},
--------------------------------------------------------------------------------
--
-- GENERAL DATA TABLES
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Protection blurbs
--------------------------------------------------------------------------------
-- This table produces the protection blurbs available with the
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and
-- protection level, and is checked by the module in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionBlurbs = {
edit = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|'
.. 'protected]] from editing',
autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access'
.. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered'
.. ' users|unregistered]] users is currently [[Help:Protection|disabled]]',
extendedconfirmed = 'This ${PAGETYPE} is currently under extended confirmed protection',
},
move = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|protected]]'
.. ' from [[Help:Moving a page|page moves]]'
},
autoreview = {
default = 'All edits made to this ${PAGETYPE} by'
.. ' [[Wikipedia:User access levels#New users|new]] or'
.. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]'
.. ' users are currently'
.. ' [[Wikipedia:Pending changes|subject to review]]'
},
upload = {
default = 'Uploading new versions of this ${PAGETYPE} is currently disabled'
}
},
--------------------------------------------------------------------------------
-- Explanation blurbs
--------------------------------------------------------------------------------
-- This table produces the explanation blurbs available with the
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,
-- protection level, and whether the page is a talk page or not. If the page is
-- a talk page it will have a talk key of "talk"; otherwise it will have a talk
-- key of "subject". The table is checked in the following order:
-- 1. page's protection action, page's protection level, page's talk key
-- 2. page's protection action, page's protection level, default talk key
-- 3. page's protection action, default protection level, page's talk key
-- 4. page's protection action, default protection level, default talk key
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
explanationBlurbs = {
edit = {
autoconfirmed = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
},
extendedconfirmed = {
default = 'Extended confirmed protection prevents edits from all unregistered editors'
.. ' and registered users with fewer than 30 days tenure and 500 edits.'
.. ' The [[Wikipedia:Protection policy#extended|policy on community use]]'
.. ' specifies that extended confirmed protection can be applied to combat'
.. ' disruption, if semi-protection has proven to be ineffective.'
.. ' Extended confirmed protection may also be applied to enforce'
.. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].'
.. ' Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask for uncontroversial changes supported by'
.. ' [[Wikipedia:Consensus|consensus]].'
},
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]]. You may also [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|request]] that this page be unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' You may [[Wikipedia:Requests for page'
.. ' protection#Current requests for edits to a protected page|request an'
.. ' edit]] to this page, or [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|ask]] for it to be unprotected.'
}
},
move = {
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves on the'
.. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves at'
.. ' [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.'
}
},
autoreview = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Edits to this ${PAGETYPE} by new and unregistered users'
.. ' will not be visible to readers until they are accepted by'
.. ' a reviewer. To avoid the need for your edits to be'
.. ' reviewed, you may'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].'
},
},
upload = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but new versions of the file'
.. ' cannot be uploaded until it is unprotected. You can'
.. ' request that a new version be uploaded by using a'
.. ' [[Wikipedia:Edit requests|protected edit request]], or you'
.. ' can [[Wikipedia:Requests for page protection|request]]'
.. ' that the file be unprotected.'
}
}
},
--------------------------------------------------------------------------------
-- Protection levels
--------------------------------------------------------------------------------
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which
-- produces a short label for different protection levels. It is sorted by
-- protection action and protection level, and is checked in the following
-- order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionLevels = {
edit = {
default = 'protected',
templateeditor = 'template-protected',
extendedconfirmed = 'extended-protected',
autoconfirmed = 'semi-protected',
},
move = {
default = 'move-protected'
},
autoreview = {
},
upload = {
default = 'upload-protected'
}
},
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- This table lists different padlock images for each protection action and
-- protection level. It is used if an image is not specified in any of the
-- banner data tables, and if the page does not satisfy the conditions for using
-- the ['image-filename-indef'] image. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
images = {
edit = {
default = 'Full-protection-shackle.svg',
templateeditor = 'Template-protection-shackle.svg',
extendedconfirmed = 'Extended-protection-shackle.svg',
autoconfirmed = 'Semi-protection-shackle.svg'
},
move = {
default = 'Move-protection-shackle.svg',
},
autoreview = {
default = 'Pending-protection-shackle.svg'
},
upload = {
default = 'Upload-protection-shackle.svg'
}
},
-- Pages with a reason specified in this table will show the special "indef"
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.
indefImageReasons = {
template = true
},
--------------------------------------------------------------------------------
-- Image links
--------------------------------------------------------------------------------
-- This table provides the data for the ${IMAGELINK} parameter, which gets
-- the image link for small padlock icons based on the page's protection action
-- and protection level. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
imageLinks = {
edit = {
default = 'Wikipedia:Protection policy#full',
templateeditor = 'Wikipedia:Protection policy#template',
extendedconfirmed = 'Wikipedia:Protection policy#extended',
autoconfirmed = 'Wikipedia:Protection policy#semi'
},
move = {
default = 'Wikipedia:Protection policy#move'
},
autoreview = {
default = 'Wikipedia:Protection policy#pending'
},
upload = {
default = 'Wikipedia:Protection policy#upload'
}
},
--------------------------------------------------------------------------------
-- Padlock indicator names
--------------------------------------------------------------------------------
-- This table provides the "name" attribute for the <indicator> extension tag
-- with which small padlock icons are generated. All indicator tags on a page
-- are displayed in alphabetical order based on this attribute, and with
-- indicator tags with duplicate names, the last tag on the page wins.
-- The attribute is chosen based on the protection action; table keys must be a
-- protection action name or the string "default".
padlockIndicatorNames = {
autoreview = 'pp-autoreview',
default = 'pp-default'
},
--------------------------------------------------------------------------------
-- Protection categories
--------------------------------------------------------------------------------
--[[
-- The protection categories are stored in the protectionCategories table.
-- Keys to this table are made up of the following strings:
--
-- 1. the expiry date
-- 2. the namespace
-- 3. the protection reason (e.g. "dispute" or "vandalism")
-- 4. the protection level (e.g. "sysop" or "autoconfirmed")
-- 5. the action (e.g. "edit" or "move")
--
-- When the module looks up a category in the table, first it will will check to
-- see a key exists that corresponds to all five parameters. For example, a
-- user page semi-protected from vandalism for two weeks would have the key
-- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module
-- changes the first part of the key to "all" and checks the table again. It
-- keeps checking increasingly generic key combinations until it finds the
-- field, or until it reaches the key "all-all-all-all-all".
--
-- The module uses a binary matrix to determine the order in which to search.
-- This is best demonstrated by a table. In this table, the "0" values
-- represent "all", and the "1" values represent the original data (e.g.
-- "indef" or "file" or "vandalism").
--
-- expiry namespace reason level action
-- order
-- 1 1 1 1 1 1
-- 2 0 1 1 1 1
-- 3 1 0 1 1 1
-- 4 0 0 1 1 1
-- 5 1 1 0 1 1
-- 6 0 1 0 1 1
-- 7 1 0 0 1 1
-- 8 0 0 0 1 1
-- 9 1 1 1 0 1
-- 10 0 1 1 0 1
-- 11 1 0 1 0 1
-- 12 0 0 1 0 1
-- 13 1 1 0 0 1
-- 14 0 1 0 0 1
-- 15 1 0 0 0 1
-- 16 0 0 0 0 1
-- 17 1 1 1 1 0
-- 18 0 1 1 1 0
-- 19 1 0 1 1 0
-- 20 0 0 1 1 0
-- 21 1 1 0 1 0
-- 22 0 1 0 1 0
-- 23 1 0 0 1 0
-- 24 0 0 0 1 0
-- 25 1 1 1 0 0
-- 26 0 1 1 0 0
-- 27 1 0 1 0 0
-- 28 0 0 1 0 0
-- 29 1 1 0 0 0
-- 30 0 1 0 0 0
-- 31 1 0 0 0 0
-- 32 0 0 0 0 0
--
-- In this scheme the action has the highest priority, as it is the last
-- to change, and the expiry has the least priority, as it changes the most.
-- The priorities of the expiry, the protection level and the action are
-- fixed, but the priorities of the reason and the namespace can be swapped
-- through the use of the cfg.bannerDataNamespaceHasPriority table.
--]]
-- If the reason specified to the template is listed in this table,
-- namespace data will take priority over reason data in the protectionCategories
-- table.
reasonsWithNamespacePriority = {
vandalism = true,
},
-- The string to use as a namespace key for the protectionCategories table for each
-- namespace number.
categoryNamespaceKeys = {
[ 2] = 'user',
[ 3] = 'user',
[ 4] = 'project',
[ 6] = 'file',
[ 8] = 'mediawiki',
[ 10] = 'template',
[ 12] = 'project',
[ 14] = 'category',
[100] = 'portal',
[828] = 'module',
},
protectionCategories = {
['all|all|all|all|all'] = 'Wikipedia fully protected pages',
['all|all|office|all|all'] = 'Wikipedia Office-protected pages',
['all|all|reset|all|all'] = 'Wikipedia Office-protected pages',
['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages',
['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files',
['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|template|all|all|edit'] = 'Wikipedia fully protected templates',
['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages',
['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages',
['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people',
['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute',
['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users',
['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism',
['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories',
['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files',
['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals',
['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages',
['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages',
['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates',
['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages',
['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules',
['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates',
['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates
['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people',
['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people',
['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute',
['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users',
['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism',
['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories',
['all|file|all|sysop|edit'] = 'Wikipedia fully protected files',
['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages',
['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages',
['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates',
['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages',
['all|module|all|all|edit'] = 'Wikipedia fully protected modules',
['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules',
['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules',
['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules',
['all|all|all|sysop|move'] = 'Wikipedia move-protected pages',
['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages',
['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute',
['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism',
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',
['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages',
['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages',
['all|template|all|sysop|move'] = 'Wikipedia move-protected templates',
['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages',
['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',
['all|file|all|all|upload'] = 'Wikipedia upload-protected files',
},
--------------------------------------------------------------------------------
-- Expiry category config
--------------------------------------------------------------------------------
-- This table configures the expiry category behaviour for each protection
-- action.
-- * If set to true, setting that action will always categorise the page if
-- an expiry parameter is not set.
-- * If set to false, setting that action will never categorise the page.
-- * If set to nil, the module will categorise the page if:
-- 1) an expiry parameter is not set, and
-- 2) a reason is provided, and
-- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck
-- table.
expiryCheckActions = {
edit = nil,
move = false,
autoreview = true,
upload = false
},
reasonsWithoutExpiryCheck = {
blp = true,
template = true,
},
--------------------------------------------------------------------------------
-- Pagetypes
--------------------------------------------------------------------------------
-- This table produces the page types available with the ${PAGETYPE} parameter.
-- Keys are namespace numbers, or the string "default" for the default value.
pagetypes = {
[0] = 'article',
[6] = 'file',
[10] = 'template',
[14] = 'category',
[828] = 'module',
default = 'page'
},
--------------------------------------------------------------------------------
-- Strings marking indefinite protection
--------------------------------------------------------------------------------
-- This table contains values passed to the expiry parameter that mean the page
-- is protected indefinitely.
indefStrings = {
['indef'] = true,
['indefinite'] = true,
['indefinitely'] = true,
['infinite'] = true,
},
--------------------------------------------------------------------------------
-- Group hierarchy
--------------------------------------------------------------------------------
-- This table maps each group to all groups that have a superset of the original
-- group's page editing permissions.
hierarchy = {
sysop = {},
reviewer = {'sysop'},
filemover = {'sysop'},
templateeditor = {'sysop'},
extendedconfirmed = {'sysop'},
autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},
user = {'autoconfirmed'},
['*'] = {'user'}
},
--------------------------------------------------------------------------------
-- Wrapper templates and their default arguments
--------------------------------------------------------------------------------
-- This table contains wrapper templates used with the module, and their
-- default arguments. Templates specified in this table should contain the
-- following invocation, and no other template content:
--
-- {{#invoke:Protection banner|main}}
--
-- If other content is desired, it can be added between
-- <noinclude>...</noinclude> tags.
--
-- When a user calls one of these wrapper templates, they will use the
-- default arguments automatically. However, users can override any of the
-- arguments.
wrappers = {
['Template:Pp'] = {},
['Template:Pp-extended'] = {'ecp'},
['Template:Pp-blp'] = {'blp'},
-- we don't need Template:Pp-create
['Template:Pp-dispute'] = {'dispute'},
['Template:Pp-main-page'] = {'mainpage'},
['Template:Pp-move'] = {action = 'move', catonly = 'yes'},
['Template:Pp-move-dispute'] = {'dispute', action = 'move', catonly = 'yes'},
-- we don't need Template:Pp-move-indef
['Template:Pp-move-vandalism'] = {'vandalism', action = 'move', catonly = 'yes'},
['Template:Pp-office'] = {'office'},
['Template:Pp-office-dmca'] = {'dmca'},
['Template:Pp-pc'] = {action = 'autoreview', small = true},
['Template:Pp-pc1'] = {action = 'autoreview', small = true},
['Template:Pp-reset'] = {'reset'},
['Template:Pp-semi-indef'] = {small = true},
['Template:Pp-sock'] = {'sock'},
['Template:Pp-template'] = {'template', small = true},
['Template:Pp-upload'] = {action = 'upload'},
['Template:Pp-usertalk'] = {'usertalk'},
['Template:Pp-vandalism'] = {'vandalism'},
},
--------------------------------------------------------------------------------
--
-- MESSAGES
--
--------------------------------------------------------------------------------
msg = {
--------------------------------------------------------------------------------
-- Intro blurb and intro fragment
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${INTROBLURB} and
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use
-- intro-blurb-noexpiry or intro-fragment-noexpiry.
-- It is possible to use banner parameters in these messages.
['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.',
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.',
['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},',
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',
--------------------------------------------------------------------------------
-- Tooltip blurb
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.
-- If the protection is temporary the tooltip-blurb-expiry message is used, and
-- if not the tooltip-blurb-noexpiry message is used.
-- It is possible to use banner parameters in these messages.
['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.',
['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.',
['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},',
['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
--------------------------------------------------------------------------------
-- Special explanation blurb
--------------------------------------------------------------------------------
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages
-- in the MediaWiki namespace.
-- It is possible to use banner parameters in this message.
['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]].',
--------------------------------------------------------------------------------
-- Protection log display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the protection log link
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.
-- It is possible to use banner parameters in these messages.
['protection-log-display'] = 'protection log',
['pc-log-display'] = 'pending changes log',
--------------------------------------------------------------------------------
-- Current version display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the page history link
-- or the move log link produced by the ${CURRENTVERSION} parameter.
-- It is possible to use banner parameters in these messages.
['current-version-move-display'] = 'current title',
['current-version-edit-display'] = 'current version',
--------------------------------------------------------------------------------
-- Talk page
--------------------------------------------------------------------------------
-- This message determines the display value of the talk page link produced
-- with the ${TALKPAGE} parameter.
-- It is possible to use banner parameters in this message.
['talk-page-link-display'] = 'talk page',
--------------------------------------------------------------------------------
-- Edit requests
--------------------------------------------------------------------------------
-- This message determines the display value of the edit request link produced
-- with the ${EDITREQUEST} parameter.
-- It is possible to use banner parameters in this message.
['edit-request-display'] = 'submit an edit request',
--------------------------------------------------------------------------------
-- Expiry date format
--------------------------------------------------------------------------------
-- This is the format for the blurb expiry date. It should be valid input for
-- the first parameter of the #time parser function.
['expiry-date-format'] = 'F j, Y "at" H:i e',
--------------------------------------------------------------------------------
-- Tracking categories
--------------------------------------------------------------------------------
-- These messages determine which tracking categories the module outputs.
['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates',
['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules',
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- These are images that are not defined by their protection action and protection level.
['image-filename-indef'] = 'Full-protection-shackle.svg',
['image-filename-default'] = 'Transparent.gif',
--------------------------------------------------------------------------------
-- End messages
--------------------------------------------------------------------------------
}
--------------------------------------------------------------------------------
-- End configuration
--------------------------------------------------------------------------------
}
a20552ae38cb5253a4fa29aa126abc74215a589f
Template:Navbox/doc
10
135
304
2023-05-10T11:20:26Z
wikipedia>CrafterNova
0
wording fix
wikitext
text/x-wiki
{{for|vertically-aligned navigation|Template:Sidebar}}
{{documentation subpage}}
{{high-use|all-pages=y}}
{{Template display|nomobile}}
{{Lua|Module:Navbox}}
{{Navbox suite}}
{{Lua sidebar}}
This template allows a [[Wikipedia:Navigation template|navigational template]] to be set up relatively quickly by supplying it with one or more lists of links. It comes equipped with default styles that should work for most navigational templates. Changing the default styles is possible, but not recommended. Using this template, or one of its "Navbox suite" sister templates, is highly recommended for standardization of navigational templates, and for ease of use.
{{Navbox visibility}}
== Usage ==
Please remove the parameters that are left blank.
<pre style="overflow: auto;">{{Navbox
| name = {{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}}
| title =
| listclass = hlist
| state = {{{state|}}}
| above =
| image =
| group1 =
| list1 =
| group2 =
| list2 =
| group3 =
| list3 =
<!-- ... -->
| below =
}}
</pre>
== Parameter list ==
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| title = {{{title}}}
| above = {{{above}}}
| image = {{{image}}}
| group1 = {{{group1}}}
| list1 = {{{list1}}}
| group2 = {{{group2}}}
| list2 = {{{list2}}}
| group3 = {{{group3}}}
| list3 = {{{list3}}}
| group4 = {{{group4}}}
| list4 = {{{list4}}}
| below = {{{below}}} <br /> See alternate navbox formats under: [[#Layout of table|''Layout of table'']]
}}
The navbox uses lowercase parameter names, as shown in the box (''above''). The required ''name'' and ''title'' will create a one-line box if other parameters are omitted.
Notice "group1" (etc.) is optional, as are sections named "above/below".
{{clear}}
The basic and most common parameters are as follows (see [[#Parameter descriptions|below]] for the full list):
: <code>name</code> – the name (Wikipedia location) of the template.
: <code>title</code> – text in the title bar, such as: <nowiki>[[Widget stuff]]</nowiki>.
: <code>listclass</code> – a CSS class for the list cells, usually <code>hlist</code> for horizontal lists. Alternatively, use bodyclass for the whole box.
: <code>state</code> – controls when a navbox is expanded or collapsed.
: <code>titlestyle</code> – a CSS style for the title-bar, such as: <code>background: gray;</code>
: <code>groupstyle</code> – a CSS style for the group-cells, such as: <code>background: #eee;</code>
: <code>above</code> – text to appear above the group/list section (could be a list of overall wikilinks).
: <code>image</code> – an optional right-side image, coded as the whole image, such as: <code><nowiki>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</nowiki></code>
:: Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight.
: <code>imageleft</code> – an optional left-side image (code the same as the "image" parameter).
: <code>group<sub>n</sub></code> – the left-side text before list-n (if group-n omitted, list-n extends to the left edge of the box, and defaults to <code>text-align:center</code> styling).
: <code>list<sub>n</sub></code> – text listing wikilinks using a [[Help:List|wikilist]] format.
: <code>below</code> – optional text to appear below the group/list section.
== Parameter descriptions ==
The following is a complete list of parameters for using {{tl|Navbox}}. In most cases, the only required parameters are <code>name</code>, <code>title</code>, and <code>list1</code>, though [[Template:Navbox/doc#Child navboxes|child navboxes]] do not even require those to be set.
{{tl|Navbox}} shares numerous common parameter names with its sister templates, {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}, for consistency and ease of use. Parameters marked with an asterisk (*) are common to all three master templates.
=== Setup parameters ===
; ''name''*
: The name of the template, which is needed for the "V • T • E" ("View • Talk • Edit") links to work properly on all pages where the template is used. You can enter <code><nowiki>{{subst:PAGENAME}}</nowiki></code> for this value as a shortcut. The name parameter is only mandatory if a <code>title</code> is specified, and the <code>border</code> parameter is not set, and the <code>navbar</code> parameter is not used to disable the navbar.
; ''state''* <span style="font-weight:normal;">[<code>autocollapse, collapsed, expanded, plain, off</code>]</span>
:* Defaults to <code>autocollapse</code>. A navbox with <code>autocollapse</code> will start out collapsed if there are two or more collapsible elements on the same page. Otherwise, the navbox will be expanded. For the technically minded, see [[MediaWiki:Common.js]] (search for "autocollapse").
:* If set to <code>collapsed</code>, the navbox will always start out in a collapsed state.
:* If set to <code>expanded</code>, the navbox will always start out in an expanded state.
:* If set to <code>plain</code>, the navbox will always be expanded with no [hide] link on the right, and the title will remain centered (by using padding to offset the <small>V • T • E</small> links).
:* If set to <code>off</code>, the navbox will always be expanded with no [hide] link on the right, but no padding will be used to keep the title centered. This is for advanced use only; the "plain" option should suffice for most applications where the [show]/[hide] button needs to be hidden.
: To show the box when standalone (non-included) but then auto-hide contents when in an article, put "expanded" inside {{tag|noinclude|p}} tags. This setting will force the box to be visible when standalone (even when followed by other boxes), displaying "[hide]", but then it will auto-collapse the box when stacked inside an article: <pre>| state = </nowiki></code>{{tag|noinclude|content=expanded}}</pre> Often times, editors will want a default initial state for a navbox, which may be overridden in an article. Here is the trick to do this:
:* In your intermediate template, create a parameter also named "state" as a pass-through like this: <pre><nowiki>| state = {{{state<includeonly>|your_desired_initial_state</includeonly>}}}</nowiki></pre>
:* The {{tag|includeonly|o}}<code>|</code> will make the template expanded when viewing the template page by itself.
:** Example 1: {{tl|Peso}} with ''autocollapse'' as the default initial state. [[Catalan peseta]] transcludes it and has only one navbox; thus, the peso navbox shows. [[Chilean peso]] has more than two navboxes; thus, the peso navbox collapses.
:** Example 2: {{tl|Historical currencies of Hungary}} with ''expanded'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|expanded</includeonly>}}}</pre> All transcluding articles show the content by default, unless there is a hypothetical article that specifies <code><nowiki>{{templatename|state=collapsed}}</nowiki></code> when transcluding.
:** Example 3: {{tl|Tourism}} with ''collapsed'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|collapsed</includeonly>}}}</pre> All transcluding articles will show the template as collapsed by default, but the template will still be uncollapsed when displayed on its own page.
:* The template {{tl|Collapsible option}} explains how to use the <code>state</code> parameter. It can be added to a {{tag|noinclude|p}} section after the template definition or to the instructions on the {{tl|documentation subpage}}.
; ''navbar''*
: If set to <code>plain</code>, the <span style="font-size: 88%;">V • T • E</span> links on the left side of the titlebar will not be displayed, and padding will be automatically used to keep the title centered. Use <code>off</code> to remove the <span style="font-size: 88%;">V • T • E</span> links, but not apply padding (this is for advanced use only; the "plain" option should suffice for most applications where a navbar is not desired). It is highly recommended that one not hide the navbar, in order to make it easier for users to edit the template, and to keep a standard style across pages.
; ''border''*
: ''See later section on [[#Child navboxes|using navboxes within one another]] for examples and a more complete description.'' If set to <code>child</code> or <code>subgroup</code>, then the navbox can be used as a borderless child that fits snugly in another navbox. The border is hidden and there is no padding on the sides of the table, so it fits into the ''list'' area of its parent navbox. If set to <code>none</code>, then the border is hidden and padding is removed, and the navbox may be used as a child of another container (do not use the <code>none</code> option inside of another navbox; similarly, only use the <code>child</code>/<code>subgroup</code> option inside of another navbox). If set to anything else (default), then a regular navbox is displayed with a 1px border. An alternate way to specify the border to be a subgroup style is like this (i.e. use the first unnamed parameter instead of the named ''border'' parameter):
:<pre>{{Navbox|child|...}}</pre>
=== Cells ===
; ''title''*
: Text that appears centered in the top row of the table. It is usually the template's topic, i.e. a succinct description of the body contents. This should be a single line, but if a second line is needed, use <code><nowiki>{{-}}</nowiki></code> to ensure proper centering. This parameter is technically not mandatory, but using {{tl|Navbox}} is rather pointless without a title.
; ''above''*
: A full-width cell displayed between the titlebar and first group/list, i.e. ''above'' the template's body (groups, lists and image). In a template without an image, ''above'' behaves in the same way as the ''list1'' parameter without the ''group1'' parameter.
; ''group<sub>n</sub>''*
: (i.e. ''group1'', ''group2'', etc.) If specified, text appears in a header cell displayed to the left of ''list<sub>n</sub>''. If omitted, ''list<sub>n</sub>'' uses the full width of the table.
; ''list<sub>n</sub>''*
: (i.e. ''list1'', ''list2'', etc.) The body of the template, usually a list of links. Format is inline, although the text can be entered on separate lines if the entire list is enclosed within <code><nowiki><div> </div></nowiki></code>. At least one ''list'' parameter is required; each additional ''list'' is displayed in a separate row of the table. Each ''list<sub>n</sub>'' may be preceded by a corresponding ''group<sub>n</sub>'' parameter, if provided (see below).
:Entries should be separated using a [[newline]] and an [[asterisk]] (*). If instead two asterisks are used, it provides [[Nesting (computing)|nesting]] within the previous entry by enclosing the entry with brackets. Increasing the number of asterisks used increases the number of brackets around entries.
; ''image''*
: An image to be displayed in a cell below the title and to the right of the body (the groups/lists). For the image to display properly, the ''list1'' parameter must be specified. The ''image'' parameter accepts standard wikicode for displaying an image, ''e.g.'': <pre>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</pre> nb: including "|right" will produce the usual left margin to provide separation from the list items and [[Zebra striping (computer graphics)|zebra striping]].
:Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight. A rare example of a correct usage would be [[special:permalink/995622594|this one]]: a map shows (in green) the location of a region within the state of Kazakhstan, and this is consistently implemented for [[:category:Kazakhstan region templates|all state's regions]].
; ''imageleft''*
: An image to be displayed in a cell below the title and to the left of the body (lists). For the image to display properly, the ''list1'' parameter must be specified and no groups can be specified. It accepts the same sort of parameter that ''image'' accepts.
; ''below''*
: A full-width cell displayed ''below'' the template's body (groups, lists and image). In a template without an image, ''below'' behaves in the same way as the template's final ''list<sub>n</sub>'' parameter without a ''group<sub>n</sub>'' parameter. For an example of the ''below'' parameter in use, see {{oldid|Main Page|352612160|this}} version of {{tl|Lists of the provinces and territories of Canada}}. {{tl|icon}} is often used for non-article links, for example <code><nowiki>{{icon|category}} [[:Category:</nowiki>''name''<nowiki>|Category]]</nowiki></code>.
=== Style parameters ===
Styles are generally advised against, to maintain consistency among templates and pages in Wikipedia; but the option to modify styles is given.
; ''bodystyle''*
: Specifies [[Cascading Style Sheets|CSS]] styles to apply to the template body. This option should be used sparingly as it can lead to visual inconsistencies. Examples:
:* <code>bodystyle = background: #''nnnnnn'';</code>
:* <code>bodystyle = width: ''N'' [em/%/px or width: auto];</code>
:* <code>bodystyle = float: [''left/right/none''];</code>
:* <code>bodystyle = clear: [''right/left/both/none''];</code>
; ''basestyle''*
: CSS styles to apply to the ''title'', ''above'', ''below'', and ''group'' cells all at once. The styles are not applied to ''list'' cells. This is convenient for easily changing the basic color of the navbox without having to repeat the style specifications for the different parts of the navbox. Example: <code>basestyle = background: lightskyblue;</code>
; ''titlestyle''*
: [[Cascading Style Sheets|CSS]] styles to apply to ''title'', most often the titlebar's background color:
:* <code>titlestyle = background: ''#nnnnnn'';</code>
:* <code>titlestyle = background: ''name'';</code>
:* <code>titlestyle = background: none;</code> — for no background color
; ''groupstyle''*
: CSS styles to apply to the ''groupN'' cells. This option overrides any styles that are applied to the entire table. Examples:
:* <code>groupstyle = background: #''nnnnnn'';</code>
:* <code>groupstyle = text-align: [''left/center/right''];</code>
:* <code>groupstyle = vertical-align: [''top/middle/bottom''];</code>
; ''group<sub>n</sub>style''*
: CSS styles to apply to a specific group, in addition to any styles specified by the ''groupstyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>group3style = background: red; color: white;</code>
; ''groupwidth''
: A number and unit specifying a uniform width for the group cells, in cases where little content in the list cells may cause group cells to be too wide. No default. However, may be overridden by the ''group(n)style'' parameter. Example: <code>groupwidth = 9em</code>
; ''liststyle''*
: CSS styles to apply to all lists. Overruled by the ''oddstyle'' and ''evenstyle'' parameters (if specified) hereafter. When using backgound colors in the navbox, see the [[#Intricacies|note hereafter]].
; ''list<sub>n</sub>style''*
: CSS styles to apply to a specific list, in addition to any styles specified by the ''liststyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>list5style = background: #ddddff;</code>
; ''listpadding''*
: A number and unit specifying the padding in each ''list'' cell. The ''list'' cells come equipped with a default padding of 0.25em on the left and right, and 0 on the top and bottom. Due to complex technical reasons, simply setting "liststyle = padding: 0.5em;" (or any other padding setting) will not work. Examples:
:* <code>listpadding = 0.5em 0;</code> (sets 0.5em padding for the top/bottom, and 0 padding for the left/right.)
:* <code>listpadding = 0;</code> (removes all list padding.)
; ''oddstyle''
; ''evenstyle''
: Applies to odd/even list numbers. Overrules styles defined by ''liststyle''. The default behavior is to add striped colors (white and gray) to odd/even rows, respectively, in order to improve readability. These should not be changed except in extraordinary circumstances.
; ''evenodd'' <span style="font-weight: normal;"><code>[swap, even, odd, off]</code></span>
: If set to <code>swap</code>, then the automatic striping of even and odd rows is reversed. Normally, even rows get a light gray background for striping; when this parameter is used, the odd rows receive the gray striping instead of the even rows. Setting to <code>even</code> or <code>odd</code> sets all rows to have that striping color. Setting to <code>off</code> disables automatic row striping.
; ''abovestyle''*
; ''belowstyle''*
: CSS styles to apply to the top cell (specified via the ''above'' parameter) and bottom cell (specified via the ''below'' parameter). Typically used to set background color or text alignment:
:* <code>abovestyle = background: #''nnnnnn'';</code>
:* <code>abovestyle = text-align: [''left/center/right''];</code>
:* <code>belowstyle = background: #''nnnnnn'';</code>
:* <code>belowstyle = text-align: [''left/center/right''];</code>
; ''imagestyle''*
; ''imageleftstyle''*
: CSS styles to apply to the cells where the image/imageleft sits. These styles should only be used in exceptional circumstances, usually to fix width problems if the width of groups is set and the width of the image cell grows too large. Example: <code>imagestyle = width:5em;</code>
===== Default styles =====
The style settings listed here are those that editors using the navbox change most often. The other more complex style settings were left out of this list to keep it simple. Most styles are set in [[MediaWiki:Common.css]].
<syntaxhighlight lang="css">
bodystyle = background: #fdfdfd; width: 100%; vertical-align: middle;
titlestyle = background: #ccccff; padding-left: 1em; padding-right: 1em; text-align: center;
abovestyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center;
belowstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center;
groupstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: right;
liststyle = background: transparent; text-align: left/center;
oddstyle = background: transparent;
evenstyle = background: #f7f7f7;
</syntaxhighlight>
Since ''liststyle'' and ''oddstyle'' are transparent, odd lists have the color of the ''bodystyle'', which defaults to #fdfdfd (white with a hint of gray). A list defaults to <code>text-align: left;</code> if it has a group, if not it defaults to <code>text-align: center;</code>. Since only ''bodystyle'' has a vertical-align all the others inherit its <code>vertical-align: middle;</code>.
=== Advanced parameters ===
; ''bodyclass''
; ''aboveclass''
; ''groupclass''
; ''listclass''
; ''belowclass''
: This enables attaching a CSS class to group or list cells. The most common use for ''listclass'' is to give it the <code>hlist</code> class that will cause lists to render horizontally. All these parameters accept the <code>hlist</code> class, but if more than one parameter is used for <code>hlist</code>, use {{para|bodyclass|hlist}} instead.
; ''titlegroup''
: This puts a group in the title area, with the same default styles as ''group<sub>n</sub>''. It should be used only in exceptional circumstances (usually advanced meta-templates) and its use requires some knowledge of the internal code of {{tl|Navbox}}; you should be ready to manually set up CSS styles to get everything to work properly if you wish to use it. If you think you have an application for this parameter, it might be best to change your mind, or consult the talk page first.
; ''titlegroupstyle''
: The styles for the titlegroup cell.
; ''innerstyle''
: A very advanced parameter to be used ''only'' for advanced meta-templates employing the navbox. Internally, the navbox uses an outer table to draw the border, and then an inner table for everything else (title/above/groups/lists/below/images, etc.). The ''style''/''bodystyle'' parameter sets the style for the outer table, which the inner table inherits, but in advanced cases (meta-templates) it may be necessary to directly set the style for the inner table. This parameter provides access to that inner table so styles can be applied. Use at your own risk.
; ''nowrapitems''
: Setting <code>|nowrapitems=yes</code> applies nowrap to each line in a list item, and to any <code>above</code> or <code>below</code> item.
; ''orphan''
: Setting <code>|orphan=yes</code> in a child navbox fixes odd/even striping and removes [[:Category:Navbox orphans]].
==== Microformats ====
; ''bodyclass''
: This parameter is inserted into the "class" attribute for the navbox as a whole.
; ''titleclass''
: This parameter is inserted into the "class" attribute for the navbox's title caption.
This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. To flag a navbox as containing [[hCard]] information about a person, for example, add the following parameter:
<pre>
| bodyclass = vcard
</pre>
''and''
<pre>
| titleclass = fn
</pre>
''or'' (for example):
<pre><nowiki>
| title = The books of <span class="fn">[[Iain Banks]]</span>
</nowiki></pre>
...and so forth.
See [[Wikipedia:WikiProject Microformats]] for more information on adding microformat information to Wikipedia, and [[microformat]] for more information on microformats in general.
== Layout of table ==
===Without image, above and below===
Table generated by {{tl|Navbox}} '''without''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only):
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| liststyle = background: silver;
| title = {{{title}}}
| group1 = {{{group1}}}
| list1 = {{{list1}}}
| group2 = {{{group2}}}
| list2 = {{{list2}}}
| list3 = {{{list3}}} ''without {{{group3}}}''
| group4 = {{{group4}}}
| list4 = {{{list4}}}
}}
===With image, above and below===
Table generated by {{tl|Navbox}} '''with''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only):
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| liststyle = background: silver;
| image = {{{image}}}
| title = {{{title}}}
| above = {{{above}}}
| group1 = {{{group1}}}
| list1 = {{{list1}}}
| group2 = {{{group2}}}
| list2 = {{{list2}}}
| list3 = {{{list3}}} ''without {{{group3}}}''
| group4 = {{{group4}}}
| list4 = {{{list4}}}
| below = {{{below}}}
}}
===With image and without groups===
Table generated by {{tl|Navbox}} '''with''' ''image'', ''imageleft'', ''lists'', and '''without''' ''groups'', ''above'', ''below'' (gray list background color added for illustration only):
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| liststyle = background: silver;
| image = {{{image}}}
| imageleft = {{{imageleft}}}
| title = {{{title}}}
| list1 = {{{list1}}}
| list2 = {{{list2}}}
| list3 = {{{list3}}}
| list4 = {{{list4}}}
}}
== Examples ==
<!-- Please do not encourage folks to use <div> within Navboxes as (unless handled carefully) they can negate liststyles/groupstyles/etc. settings. -->
=== No image ===
<syntaxhighlight lang="wikitext" style="overflow: auto;">
{{Navbox
| name = Navbox/doc
| title = [[MSC Malaysia]]
| listclass = hlist
| group1 = Centre
| list1 =
* [[Cyberjaya]]
| group2 = Area
| list2 =
* [[Klang Valley]]
| group3 = Major landmarks
| list3 =
* [[Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
* [[Technology Park Malaysia]]
* [[Putrajaya]]
* [[Cyberjaya]]
* [[Kuala Lumpur International Airport]]
| group4 = Infrastructure
| list4 =
* [[Express Rail Link]]
* [[KL-KLIA Dedicated Expressway]]
| group5 = Prime applications
| list5 =
* [[E-Government]]
* [[MyKad]]
}}
</syntaxhighlight>
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| title = [[MSC Malaysia]]
| listclass = hlist
| group1 = Centre
| list1 =
* [[Cyberjaya]]
| group2 = Area
| list2 =
* [[Klang Valley]]
| group3 = Major landmarks
| list3 =
* [[Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
* [[Technology Park Malaysia]]
* [[Putrajaya]]
* [[Cyberjaya]]
* [[Kuala Lumpur International Airport]]
| group4 = Infrastructure
| list4 =
* [[Express Rail Link]]
* [[KL-KLIA Dedicated Expressway]]
| group5 = Prime applications
| list5 =
* [[E-Government]]
* [[MyKad]]
}}
== Child navboxes ==
{{Selfref|For additional examples, see the [[Template:Navbox/testcases|Navbox testcases page]].}}
It is possible to place multiple navboxes within a single border by using "child" as the first parameter, or by setting the ''border'' parameter. The basic code for doing this is as follows (which adds a subgroup for the first group/list area):
<pre style="overflow: auto;">
{{Navbox
| name = {{subst:PAGENAME}}
| title = Title
| group1 = [optional]
| list1 = {{Navbox|child
...child navbox parameters...
}}
...
}}
</pre>
=== Subgroups example ===
This example shows two subgroups created using <code>child</code> as the first unnamed parameter. The striping is alternated automatically. To remove the striping altogether, you can set <code>liststyle = background:transparent;</code> in each of the navboxes.
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| title = Multiple subgroup example
| above = Above
| below = Below
| group1 = Group1
| list1 = List1
| group2 = Group2
| list2 =
{{{{PAGENAMETDOC}}|child
| group1 = Group2.1
| list1 = List1
| group2 = Group2.2
| list2 = List2
| group3 = Group2.3
| list3 = List3
}}
| group3 = Group3
| list3 = List3
| group4 = Group4
| list4 =
{{{{PAGENAMETDOC}}|child
| group1 = Group4.1
| list1 = List1
| group2 = Group4.2
| list2 = List2
| group3 = Group4.3
| list3 = List3
}}
}}
=== Multiple show/hides in a single container ===
{{main|Template:Navbox with collapsible groups}}
The example below is generated using a regular navbox for the main container, then its list1, list2, and list3 parameters each contain another navbox, with <code>1 = child</code> set. The view (v), talk (t), edit (e) navbar links are hidden using <code>navbar = plain</code> for each of them, or could be suppressed by just leaving out the ''name'' parameter (child navboxes do not require the name parameter to be set, unlike regular navboxes).
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| title = [[French colonial empire|Former French overseas empire]]
| state = uncollapsed
| list1 = {{{{PAGENAMETDOC}}|child
| navbar = plain
| title = [[French colonial empire|Former French colonies]] in [[Africa]] and the [[Indian Ocean]]
| listclass = hlist
| group1 = [[Mahgreb]]
| list1 =
* [[French rule in Algeria|Algeria]]
* [[French Morocco|Morocco]] <small>([[Arguin|Arguin Island]])</small>
* [[History of Tunisia|Tunisia]]
| group2 = [[French West Africa]]
| list2 =
* [[History of Côte d'Ivoire#French Period|Côte d'Ivoire]]
* [[French Dahomey|Dahomey]]
* [[French Sudan]]
* [[French Guinea|Guinea]]
* [[History of Mauritania#French colonization and post-colonial history|Mauritania]]
* [[History of Niger#Colonization|Niger]]
* [[History of Senegal|Senegal]]
* [[French Upper Volta|Upper Volta]]
* [[French Togoland]]
* [[James Island (The Gambia)|James Island]]
| group3 = [[French Equatorial Africa]]
| list3 =
* [[Colonial Chad|Chad]]
* [[History of Gabon|Gabon]]
* [[History of the Republic of the Congo|Middle Congo]]
* [[Oubangui-Chari]]
| group4 = [[Comoros]]
| list4 =
* [[Anjouan]]
* [[Grande Comore]]
* [[Mohéli]]
* [[History of Djibouti#French Interest|French Somaliland (Djibouti)]]
* [[History of Madagascar#French control|Madagascar]]
* [[Mauritius|Ile de France]]
* [[Seychelles]]
}}
| list2 = {{{{PAGENAMETDOC}}|child
| navbar = plain
| title = [[French colonial empire|Former French colonies]] in the [[Americas]]
| listclass = hlist
| list1 =
* [[New France]]{{spaces|2}}<small>([[Acadia]], [[Louisiana (New France)|Louisiana]], [[Canada, New France|Canada]], [[Newfoundland (island)|Terre Neuve]]) 1655–1763 </small>
| list2 =
* [[Inini]]
* [[Berbice]]
* [[Saint-Domingue]]
* <small>[[Haiti]]</small>
* [[Tobago]]
* [[History of the British Virgin Islands|Virgin Islands]]
* [[France Antarctique]]
* [[France Équinoxiale]]
| below = [[French West India Company]]
}}
| list3 = {{{{PAGENAMETDOC}}|child
| navbar = plain
| title = [[French colonial empire|Former French colonies]] in [[Asia]] and [[Oceania]]
| listclass = hlist
| group1 = [[French India]]
| list1 =
* [[Chandernagor]]
* [[Coromandel Coast]]
* [[History of Chennai|Madras]]
* [[Mahé, India|Mahé]]
* [[History of Pondicherry|Pondichéry]]
* [[Karaikal]]
* [[Yanam (India)|Yanaon]]
| group2 = [[French Indochina]]
| list2 =
* [[Colonial Cambodia|Cambodia]]
* [[History of Laos to 1945#French Laos|Laos]]
* [[French Indochina|Vietnam]] <small>([[Annam (French colony)|Annam]], [[Cochinchina]], [[Tonkin]])</small>
| group3 = Other Asian
| list3 =
* [[Alawite State|Alaouites]]
* [[Republic of Hatay|Alexandretta-Hatay]]
* [[Sri Lanka|Ceylon]]
* [[Kwangchowan]]
| group4 = [[Oceania]]
| list4 =
* [[New Hebrides]]
** [[History of Vanuatu|Vanuatu]]
| below = [[French East India Company]]
}}
}}
== Relationship with other Navbox templates ==
This navbox template works in conjunction with two other templates: {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}. All three of these templates share common parameters for consistency and ease of use (such parameters are marked with an asterisk (*) in the [[#Parameter descriptions|parameter descriptions]] list hereinbefore). Most importantly, each template can be used as a child of one another (by using the {{para|border|child}} parameter, or by specifying the first unnamed parameter to be <code>child</code>. For example: <code><nowiki>{{Navbox|child ...}}</nowiki></code>, <code><nowiki>{{Navbox with columns|child ...}}</nowiki></code> or <code><nowiki>{{Navbox with collapsible groups|child ...}}</nowiki></code>.)
== Technical details ==
* The {{navbar|1=:{{FULLPAGENAME}}|mini=on}} links are produced by [[Template:Navbar]]. If you have a question about them, it is probably best to ask at [[Template talk:Navbar]].
* The 2px wide border between groups and lists is drawn using the border-left property of the list cell. Thus, if you wish to change the background color of the template (for example <code>bodystyle = background:purple;</code>), then you'll need to make the border-left-color match the background color (i.e. <code>liststyle = border-left-color: purple;</code>). If you wish to have a border around each list cell, then the 2px border between the list cells and group cells will disappear; you'll have to come up with your own solution.
* Adjacent navboxes have only a 1 pixel border between them. If you set the top or bottom margin of <code>style/bodystyle</code>, then this will not work.
* The default margin-left and margin-right of the outer navbox table are set to "auto;". If you wish to use navbox as a float, you need to manually set the margin-left and margin-right values, because the auto margins interfere with the float option. For example, add the following code to use the navbox as a float:
** <code>bodystyle = width: 22em; float: right; margin-left: 1em; margin-right: 0;</code>
=== Copying to other projects or wikis ===
If you are trying to copy {{tlf|Navbox}} to your local wiki, there are several other things that must be installed or copied over as well:
* The [[mw:Extension:Scribunto|Scribunto]] and [[:mw:Extension:TemplateStyles|TemplateStyles]] extensions must be installed.
* [[Module:Navbox]] and its module and TemplateStyles dependencies, listed in the above two links
* Optionally, the <code>Add support to mw-collapsible for autocollapse, innercollapse and outercollapse</code> script from [[MediaWiki:Common.js]] may be copied, if autocollapsing is desired.
== TemplateData ==
{{TemplateDataHeader}}
<templatedata>
{
"params": {
"state": {
"label": "State",
"description": "Controls when a navbox is expanded or collapsed",
"example": "autocollapse",
"suggestedvalues": [
"autocollapse",
"collapsed",
"expanded",
"plain",
"off"
],
"default": "autocollapse",
"suggested": true
},
"title": {
"label": "Title",
"description": "Text in the title bar; centered in the top row of the table. Usually the template's topic.",
"example": "[[Widget stuff]]",
"suggested": true
},
"above": {
"label": "Above",
"description": "Full-width cell displayed between the titlebar and first group/list, i.e. above the template's body (groups, lists and image)",
"type": "string",
"suggested": true
},
"image": {
"label": "Image",
"description": "Image to be displayed in a cell below the title and to the right of the body",
"example": "[[File:XX.jpg | 80px | link= | alt= ]]",
"type": "wiki-file-name",
"suggested": true
},
"group1": {
"label": "Group 1",
"description": "If specified, text appears in a header cell displayed to the left of list 1. If omitted, list 1 uses the full width of the table.",
"suggested": true
},
"list1": {
"label": "List 1",
"description": "Body of the template; usually a list of links. Format is inline. At least one list parameter is required; each additional list is displayed in a separate row of the table. Each listn may be preceded by a corresponding groupn parameter.\nEntries should be separated using a newline and an asterisk. If two asterisks are used, it provides nesting within the previous entry with brackets.",
"required": true,
"suggested": true
},
"group2": {
"suggested": true
},
"list2": {
"suggested": true
},
"list3": {
"suggested": true
},
"group3": {
"suggested": true
},
"group4": {},
"list4": {},
"below": {
"label": "Below",
"description": "Full-width cell displayed below the template's body.",
"suggested": true
},
"imageleft": {
"label": "Image left",
"description": "Image to be displayed in a cell below the title and to the left of the body. For the image to display properly, list1 parameter must be specified and no groups can be specified.",
"example": "[[File:XX.jpg | 80px | link= | alt= ]]",
"type": "wiki-file-name"
},
"name": {
"label": "Name",
"description": "The name of the template. Needed for \"View • Talk • Edit\" links to work properly.",
"type": "string",
"default": "{{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}}",
"suggested": true
},
"listclass": {
"label": "List class",
"description": "CSS class for the list cells, usually hlist for horizontal lists. Alternatively, use bodyclass for the whole box.",
"example": "hlist",
"type": "string"
},
"navbar": {
"label": "Navbar status",
"example": "plain, off",
"type": "string"
},
"border": {
"label": "Border status",
"example": "child, subgroup, none",
"type": "string"
},
"bodystyle": {},
"basestyle": {},
"titlestyle": {},
"groupstyle": {},
"group1style": {},
"groupwidth": {},
"liststyle": {},
"list1style": {},
"listpadding": {},
"oddstyle": {},
"evenstyle": {},
"evenodd": {
"suggestedvalues": [
"swap",
"even",
"odd",
"off"
]
},
"abovestyle": {},
"belowstyle": {},
"imagestyle": {},
"imageleftstyle": {}
},
"description": "Creates a navigational box for links to other pages. \nDoes not display in mobile.",
"paramOrder": [
"name",
"title",
"group1",
"list1",
"listclass",
"state",
"above",
"below",
"image",
"group2",
"list2",
"group3",
"list3",
"group4",
"list4",
"imageleft",
"navbar",
"border",
"bodystyle",
"basestyle",
"titlestyle",
"groupstyle",
"liststyle",
"group1style",
"list1style",
"groupwidth",
"listpadding",
"oddstyle",
"evenstyle",
"evenodd",
"abovestyle",
"belowstyle",
"imagestyle",
"imageleftstyle"
]
}
</templatedata>
== See also ==
* {{tl|Navboxes}} — groups several navigation boxes together.
* {{tl|Nobold}} — To display text at normal font-weight within a context where the default font-weight is bold, e.g. header cells in tables.
* {{tl|Sidebar}} — Vertically-aligned navigation templates.
* [[Template:Navbox/testcases]] — For additional examples of template code.
* [[Wikipedia:Line-break handling]] — The how-to guide about how to handle word wraps (line breaks) on Wikipedia, such as the wrapping of the link lists used in navboxes.
* [[Wikipedia:Template documentation]] — Guideline to creating the accompanying documentation
* {{tl|Nowrap begin}}, {{tl|·}} and {{tl|•}} are '''deprecated''' in favor of the <code>hlist</code> class for formatting lists. See [[Template:Flatlist#Technical details|Flatlist]] for a technical explanation of how <code>hlist</code> works.
=== Tracking categories ===
* {{clc|Navbox orphans}}
* {{clc|Navigational boxes without horizontal lists}}
* {{clc|Navboxes using background colours}}
* {{clc|Potentially illegible navboxes}}
* {{clc|Navboxes using borders}}
{{Navigation templates}}
<includeonly>{{sandbox other||
<!-- Add categories below this line, and interwikis at Wikidata -->
[[Category:Navigational boxes| ]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Wikipedia metatemplates]]
[[Category:Collapse templates]]
}}</includeonly>
9063bd1d64f66910446323fd0f80c3a65eea6e20
Module:Unicode data
828
238
700
2023-05-10T13:46:04Z
wikipedia>Trappist the monk
0
+is_rtl_frame (frame) entry point to gain access to is_rtl (str) from an invoke;
Scribunto
text/plain
local p = {}
local floor = math.floor
local function errorf(level, ...)
if type(level) == "number" then
return error(string.format(...), level + 1)
else -- level is actually the format string.
return error(string.format(level, ...), 2)
end
end
local function binary_range_search(codepoint, ranges)
local low, mid, high
low, high = 1, ranges.length or require "Module:TableTools".length(ranges)
while low <= high do
mid = floor((low + high) / 2)
local range = ranges[mid]
if codepoint < range[1] then
high = mid - 1
elseif codepoint <= range[2] then
return range, mid
else
low = mid + 1
end
end
return nil, mid
end
p.binary_range_search = binary_range_search
--[[
local function linear_range_search(codepoint, ranges)
for i, range in ipairs(ranges) do
if range[1] <= codepoint and codepoint <= range[2] then
return range
end
end
end
--]]
-- Load a module by indexing "loader" with the name of the module minus the
-- "Module:Unicode data/" part. For instance, loader.blocks returns
-- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be
-- returned.
local loader = setmetatable({}, {
__index = function (self, key)
local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key)
if not success then
data = false
end
self[key] = data
return data
end
})
-- For the algorithm used to generate Hangul Syllable names,
-- see "Hangul Syllable Name Generation" in section 3.12 of the
-- Unicode Specification:
-- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf
local name_hooks = {
{ 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters
{ 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters
{ 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A
{ 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph
{ 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables
local Hangul_data = loader.Hangul
local syllable_index = codepoint - 0xAC00
return ("HANGUL SYLLABLE %s%s%s"):format(
Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)],
Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count)
/ Hangul_data.trail_count)],
Hangul_data.trails[syllable_index % Hangul_data.trail_count]
)
end },
-- High Surrogates, High Private Use Surrogates, Low Surrogates
{ 0xD800, 0xDFFF, "<surrogate-%04X>" },
{ 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use
-- CJK Compatibility Ideographs
{ 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0x17000, 0x187F7, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph
{ 0x18800, 0x18AFF, function (codepoint)
return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF)
end },
{ 0x18D00, 0x18D08, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement
{ 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu
{ 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B
{ 0x2A700, 0x2B739, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C
{ 0x2B740, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension D
{ 0x2B820, 0x2CEA1, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E
{ 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F
-- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane)
{ 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement
return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17)
end},
{ 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G
{ 0x31350, 0x323AF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H
{ 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use
{ 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use
}
name_hooks.length = #name_hooks
local name_range_cache
local function generate_name(data, codepoint)
if type(data) == "string" then
return data:format(codepoint)
else
return data(codepoint)
end
end
--[[
-- Checks that the code point is a number and in range.
-- Does not check whether code point is an integer.
-- Not used
local function check_codepoint(funcName, argIdx, val)
require 'libraryUtil'.checkType(funcName, argIdx, val, 'number')
if codepoint < 0 or 0x10FFFF < codepoint then
errorf("Codepoint %04X out of range", codepoint)
end
end
--]]
-- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8
function p.lookup_name(codepoint)
-- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned
-- (Cn) and specifically noncharacters:
-- https://www.unicode.org/faq/private_use.html#nonchar4
if 0xFDD0 <= codepoint and (codepoint <= 0xFDEF
or floor(codepoint % 0x10000) >= 0xFFFE) then
return ("<noncharacter-%04X>"):format(codepoint)
end
if name_range_cache -- Check if previously used "name hook" applies to this code point.
and codepoint >= name_range_cache[1]
and codepoint <= name_range_cache[2] then
return generate_name(name_range_cache[3], codepoint)
end
local range = binary_range_search(codepoint, name_hooks)
if range then
name_range_cache = range
return generate_name(range[3], codepoint)
end
local data = loader[('names/%03X'):format(codepoint / 0x1000)]
if data and data[codepoint] then
return data[codepoint]
-- Unassigned (Cn) consists of noncharacters and reserved characters.
-- The character has been established not to be a noncharacter,
-- and if it were assigned, its name would already been retrieved,
-- so it must be reserved.
else
return ("<reserved-%04X>"):format(codepoint)
end
end
--[[
-- No image data modules on Wikipedia yet.
function p.lookup_image(codepoint)
local data = loader[('images/%03X'):format(codepoint / 0x1000)]
if data then
return data[codepoint]
end
end
--]]
local planes = {
[ 0] = "Basic Multilingual Plane";
[ 1] = "Supplementary Multilingual Plane";
[ 2] = "Supplementary Ideographic Plane";
[ 3] = "Tertiary Ideographic Plane";
[14] = "Supplementary Special-purpose Plane";
[15] = "Supplementary Private Use Area-A";
[16] = "Supplementary Private Use Area-B";
}
-- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable.
local blocks
local function block_iter(blocks, i)
i = i + 1
local data = blocks[i]
if data then
-- Unpack doesn't work on tables loaded with mw.loadData.
return i, data[1], data[2], data[3]
end
end
-- An ipairs-type iterator generator for the list of blocks.
function p.enum_blocks()
local blocks = loader.blocks
return block_iter, blocks, 0
end
function p.lookup_plane(codepoint)
local i = floor(codepoint / 0x10000)
return planes[i] or ("Plane %u"):format(i)
end
function p.lookup_block(codepoint)
local blocks = loader.blocks
local range = binary_range_search(codepoint, blocks)
if range then
return range[3]
else
return "No Block"
end
end
function p.get_block_info(name)
for i, block in ipairs(loader.blocks) do
if block[3] == name then
return block
end
end
end
function p.is_valid_pagename(pagename)
local has_nonws = false
for cp in mw.ustring.gcodepoint(pagename) do
if (cp == 0x0023) -- #
or (cp == 0x005B) -- [
or (cp == 0x005D) -- ]
or (cp == 0x007B) -- {
or (cp == 0x007C) -- |
or (cp == 0x007D) -- }
or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR
or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block
or (cp == 0xFFFD) -- REPLACEMENT CHARACTER
then
return false
end
local printable, result = p.is_printable(cp)
if not printable then
return false
end
if result ~= "space-separator" then
has_nonws = true
end
end
return has_nonws
end
local function manual_unpack(what, from)
if what[from + 1] == nil then
return what[from]
end
local result = {}
from = from or 1
for i, item in ipairs(what) do
if i >= from then
table.insert(result, item)
end
end
return unpack(result)
end
local function compare_ranges(range1, range2)
return range1[1] < range2[1]
end
-- Creates a function to look up data in a module that contains "singles" (a
-- code point-to-data map) and "ranges" (an array containing arrays that contain
-- the low and high code points of a range and the data associated with that
-- range).
-- "loader" loads and returns the "singles" and "ranges" tables.
-- "match_func" is passed the code point and either the data or the "dots", and
-- generates the final result of the function.
-- The varargs ("dots") describes the default data to be returned if there wasn't
-- a match.
-- In case the function is used more than once, "cache" saves ranges that have
-- already been found to match, or a range whose data is the default if there
-- was no match.
local function memo_lookup(data_module_subpage, match_func, ...)
local dots = { ... }
local cache = {}
local singles, ranges
return function (codepoint)
if not singles then
local data_module = loader[data_module_subpage]
singles, ranges = data_module.singles, data_module.ranges
end
if singles[codepoint] then
return match_func(codepoint, singles[codepoint])
end
local range = binary_range_search(codepoint, cache)
if range then
return match_func(codepoint, manual_unpack(range, 3))
end
local range, index = binary_range_search(codepoint, ranges)
if range then
table.insert(cache, range)
table.sort(cache, compare_ranges)
return match_func(codepoint, manual_unpack(range, 3))
end
if ranges[index] then
local dots_range
if codepoint > ranges[index][2] then
dots_range = {
ranges[index][2] + 1,
ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF,
unpack(dots)
}
else -- codepoint < range[index][1]
dots_range = {
ranges[index - 1] and ranges[index - 1][2] + 1 or 0,
ranges[index][1] - 1,
unpack(dots)
}
end
table.sort(cache, compare_ranges)
end
return match_func(codepoint)
end
end
-- Get a code point's combining class value in [[Module:Unicode data/combining]],
-- and return whether this value is not zero. Zero is assigned as the default
-- if the combining class value is not found in this data module.
-- That is, return true if character is combining, or false if it is not.
-- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for
-- more information.
p.is_combining = memo_lookup(
"combining",
function (codepoint, combining_class)
return combining_class and combining_class ~= 0 or false
end,
0)
function p.add_dotted_circle(str)
return (mw.ustring.gsub(str, ".",
function(char)
if p.is_combining(mw.ustring.codepoint(char)) then
return '◌' .. char
end
end))
end
local lookup_control = memo_lookup(
"control",
function (codepoint, ccc)
return ccc or "assigned"
end,
"assigned")
p.lookup_control = lookup_control
function p.is_assigned(codepoint)
return lookup_control(codepoint) ~= "unassigned"
end
function p.is_printable(codepoint)
local result = lookup_control(codepoint)
return (result == "assigned") or (result == "space-separator"), result
end
function p.is_whitespace(codepoint)
local result = lookup_control(codepoint)
return (result == "space-separator"), result
end
p.lookup_category = memo_lookup(
"category",
function (codepoint, category)
return category
end,
"Cn")
local lookup_script = memo_lookup(
"scripts",
function (codepoint, script_code)
return script_code or 'Zzzz'
end,
"Zzzz")
p.lookup_script = lookup_script
function p.get_best_script(str)
-- Check type of argument, because mw.text.decode coerces numbers to strings!
require "libraryUtil".checkType("get_best_script", 1, str, "string")
-- Convert HTML character references (including named character references,
-- or character entities) to characters.
str = mw.text.decode(str, true)
local scripts = {}
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
-- Ignore "Inherited", "Undetermined", or "Uncoded" scripts.
if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then
scripts[script] = true
end
end
-- If scripts does not contain two or more keys,
-- return first and only key (script code) in table.
if not next(scripts, next(scripts)) then
return next(scripts)
end -- else return majority script, or else "Zzzz"?
end
function p.is_Latin(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0340-U+10FFFF. If they are not found and there is at least
-- one Latin-script character, the string counts as Latin, because the rest
-- of the characters can only be Zyyy, Zinh, and Zzzz.
-- The only scripts found below U+0370 (the first code point of the Greek
-- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz.
-- See the codepage in the [[UTF-8]] article.
if not str:find "[\205-\244]" then
for codepoint in mw.ustring.gcodepoint(str) do
if lookup_script(codepoint) == "Latn" then
return true
end
end
end
local Latn = false
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if script == "Latn" then
Latn = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return Latn
end
-- Checks that a string contains only characters belonging to right-to-left
-- scripts, or characters of ignorable scripts.
function p.is_rtl(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0580-U+10FFFF. If they are not found, the string can only
-- have characters from a left-to-right script, because the first code point
-- in a right-to-left script is U+0591, in the Hebrew block.
if not str:find "[\214-\244]" then
return false
end
local result = false
local rtl = loader.scripts.rtl
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if rtl[script] then
result = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return result
end
--[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------
external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so
that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text
has <br /> tags.
]]
function p.is_rtl_frame (frame)
local str = frame.args[1]; -- get the string from the {{#invoke:}} frame
str = str:gsub ('%b<>', ''); -- strip any html and html-like tags
return p.is_rtl (str); -- return if whatever remains rtl; false else
end
local function get_codepoint(args, arg)
local codepoint_string = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
local codepoint = tonumber(codepoint_string, 16)
or errorf(2, "Parameter %s is not a code point in hexadecimal base",
tostring(arg))
if not (0 <= codepoint and codepoint <= 0x10FFFF) then
errorf(2, "code point in parameter %s out of range", tostring(arg))
end
return codepoint
end
local function get_func(args, arg, prefix)
local suffix = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
suffix = mw.text.trim(suffix)
local func_name = prefix .. suffix
local func = p[func_name]
or errorf(2, "There is no function '%s'", func_name)
return func
end
-- This function allows any of the "lookup" functions to be invoked. The first
-- parameter is the word after "lookup_"; the second parameter is the code point
-- in hexadecimal base.
function p.lookup(frame)
local func = get_func(frame.args, 1, "lookup_")
local codepoint = get_codepoint(frame.args, 2)
local result = func(codepoint)
if func == p.lookup_name then
-- Prevent code point labels such as <control-0000> from being
-- interpreted as HTML tags.
result = result:gsub("<", "<")
end
return result
end
function p.is(frame)
local func = get_func(frame.args, 1, "is_")
-- is_Latin and is_valid_pagename take strings.
if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then
return (func(frame.args[2]))
else -- The rest take code points.
local codepoint = get_codepoint(frame.args, 2)
return (func(codepoint)) -- Adjust to one result.
end
end
return p
444a6cd03f4361fb8aa2439f5f5f5dc1f1a4dd59
Template:As of
10
102
220
2023-05-18T21:22:11Z
wikipedia>Sdkb
0
Adding {{yesno}} to make {{{since}}} and {{{lc}}} variables case-insensitive, per [[WP:SILENTCONSENSUS|silent]] consensus [[Template_talk:As_of/Archive_1#Yesno?|at talk]]
wikitext
text/x-wiki
<!--{{As of}} begin--><includeonly><!--
## param 1 is the year
## optional param 2 is the month
## optional param 3 is the day of the month
## optional named parameter alt=[text] is alternative display text (may include wiki markup)
## optional named parameter df=US produces American date format in displayed text
## optional named parameter lc=on gives lower-case-first output
## optional named parameter url=[URL] gives statement reference
## displayed text ([A/a]s of [Start date] by default)
-->{{#if: {{{alt|}}} | {{{alt}}} | {{#if:{{{bare|}}}||{{#if:{{yesno|{{{since|}}}}}|{{#if: {{yesno|{{{lc|}}}}} | s | S }}ince | {{#if: {{yesno|{{{lc|}}}}} | a | A }}s of}}}} {{#if:{{{pre|}}}|{{{pre}}} }}{{#if: {{{3|}}} | {{#ifeq:{{lc:{{{df|}}}}}|us|{{MONTHNAME|{{{2}}}}} {{#expr:{{{3}}}}}, |{{#expr:{{{3}}}}} {{MONTHNAME|{{{2}}}}} }}{{{1}}}|{{#if: {{{2|}}} |{{MONTHNAME|{{{2}}}}} }}{{{1}}}}}}}{{#if:{{{post|}}}|<nowiki />{{{post}}}}}<!--
#### That nowiki is required or, various characters (:, ;, #, and *} will be parsed as wikisyntax for list items.
## ref/update inline banner (hidden by default)
--><sup class="plainlinks noexcerpt noprint asof-tag {{#if:{{{url|}}}|ref|update}}" style="display:none;">[{{#if:{{{url|}}}|{{{url}}} [ref]|{{fullurl:{{PAGENAME}}|action=edit}} [update]}}]</sup><!--
## categorisation disabled outside main namespace
-->{{DMCA|Articles containing potentially dated statements|from|<!--
## temporal category for template (word method)
-->{{#if: {{#ifexpr: {{{1}}} = 1 }} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 2004 | {{{1}}} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 1989 | {{#time:Y|{{{1}}}}} | before 1990 }}}} | <!--
## temporal category for template (parameter method)
-->{{#ifexpr: {{{1}}} > 2004 | {{#if:{{{2|}}} | {{MONTHNAME|{{{2}}}}} }} {{{1}}} | {{#ifexpr:{{{1}}} > 1989 | {{{1}}} | before 1990 }}}}}}|<!--
## global category for template
-->All articles containing potentially dated statements}}</includeonly><!--{{As of}} end--><noinclude><!--
## dynamic example (as of today, self ref)
-->{{As of|{{CURRENTYEAR}}|{{CURRENTMONTH}}|{{CURRENTDAY}}}}<sup class="plainlinks">[https://en.wikipedia.org/wiki/Template:As_of [ref]]</sup>
{{documentation}}
<!-- Add categories and inter-wikis to the /doc subpage, not here! -->
</noinclude>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using as of template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:As of]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | alt | bare | df | lc | post | pre | since | url }}
dd0794e75a86855d0ccc649adeaa8be5d3c3c704
Module:TNT
828
27
403
53
2023-05-20T18:33:54Z
meta>Dmehus
0
Undid revision 335077 by [[Special:Contributions/Dmehus|Dmehus]] ([[User talk:Dmehus|talk]]) Revert. Did not fix it
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
params[k - 2] = mw.text.trim(v)
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
function p.getTemplateData(dataset)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
local names = {}
for _, field in ipairs(data.schema.fields) do
table.insert(names, field.name)
end
local params = {}
local paramOrder = {}
for _, row in ipairs(data.data) do
local newVal = {}
local name = nil
for pos, columnName in ipairs(names) do
if columnName == 'name' then
name = row[pos]
else
newVal[columnName] = row[pos]
end
end
if name then
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
params['zzz123']=''
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description
})
json = string.gsub(json,'"zzz123":"",?', "")
return json
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset)
end
local data = mw.ext.data.get(dataset, lang)
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
2c570369c78089aef29c72768918373f61b7075d
Template:Documentation/doc
10
162
371
2023-05-21T19:33:27Z
wikipedia>WOSlinker
0
syntaxhighlight lang="wikitext"
wikitext
text/x-wiki
<noinclude>{{pp-semi-indef}}
</noinclude>{{Distinguish|Template:Documentation subpage}}
{{Documentation subpage}}
{{template shortcut|doc}}
{{High-use}}
{{Lua|Module:Documentation}}
{{Never substitute}}
The {{tlx|documentation}} template is used to contain the [[WP:TDOC|documented information and instructions]] of a certain template, usually from a /doc subpage. It can also be configured to load the content from other pages or be directly fed by text.
For detailed instructions on how and when to use this template, see [[Wikipedia:Template documentation]] (shortcut: [[WP:TDOC]]).
This template has two parts: the big "documentation box" with the documentation inside alongside a toolbar (the <code>[view][edit][hist][purge]</code> links), and the smaller "link box" that shows metadata about the documentation alongside the [[Wikipedia:Template sandbox and test cases|sandbox and testcases]] links.
Use of this template allows templates to be [[Wikipedia:Protection policy|protected]], where necessary, while allowing anyone to edit the documentation and categories.
== General syntax ==
Normally, the template is used without parameters and is placed inside {{tag|noinclude}} at the bottom of the template page (see {{section link|#Placement and tags}} for more information):
<syntaxhighlight lang="wikitext">
<!--Last line of your template code--><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage -->
</noinclude>
</syntaxhighlight>
=== Transcluding a different page ===
To transclude a different page other than the /doc subpage, simply provide {{para|1}} like this:
<syntaxhighlight lang="wikitext">
<!--Last line of your template code--><noinclude>
{{Documentation|Template:Other page/doc}}
</noinclude>
</syntaxhighlight>
Note that when loading the documentation from a page other than the local /doc subpage, it becomes tricky to handle the categories.
=== Using the {{para|content}} parameter ===
The documentation can also be fed directly as text, by using the {{para|content}} parameter:
<syntaxhighlight lang="wikitext">
<!--Last line of your template code--><noinclude>
{{Documentation
| content =
<!-- template documentation -->
}}</noinclude>
</syntaxhighlight>
When using this parameter, the toolbar will not show. Note that the /doc subpage in the link box will still show up if it exists.
Also note that when {{para|1}} and {{para|content}} is specified, {{para|content}} takes precedence and always shows in the documentation box.
== Advanced syntax ==
=== Customizing the heading ===
The heading in the documentation box changes depending on namespace. See the below list for the default text in each namespace:
* Template namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Template documentation'''
* Module namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Module documentation'''
* Other namespaces: '''Documentation'''
To customize the heading, simply set the parameter {{para|heading}} to anything you like, for example {{para|heading|Infobox documentation}}.
Note that if the heading parameter is empty but defined (like {{para|heading|}}) the heading alongside the toolbar will not show.
The {{para|heading-style}} parameter can be fed optional [[Cascading Style Sheets|CSS]] values, like {{para|heading-style|font-size:150%;color:red;}}. Not that you should omit quotation marks <code>" "</code> and add the ending semicolon <code>;</code>.
=== Customizing the link box ===
To customize the link box, simply set {{para|link box}} to something else, like {{para|link box|The above documentation is automatically generated from [[Template:Foo]]}}.
To hide the link box, simply set {{para|link box}} to <code>off</code>.
=== Testing ===
You can simulate the output for a given page by using the {{para|page}} parameter. For example, if you use the code {{para|page|Template:Edit protected}}, the template will behave exactly as if it were on the page [[Template:Edit protected]], including showing the documentation from [[Template:Edit protected/doc]], linking to [[Template:Edit protected/sandbox]], etc. This parameter is useful for testing and is used extensively on the [[Module:Documentation/testcases|module testcases page]].
== Placement and tags ==
{{Further information|Wikipedia:Template documentation#Where to place it}}
This code should be added at the bottom of the template code page, with no space before {{Tag|noinclude|o}} (which causes extra whitespace to show on pages where the template is transcluded):
<syntaxhighlight lang="wikitext"><!--Last line of your template code--><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage -->
</noinclude></syntaxhighlight>
To automatically insert the above text, you can also use the [[Wikipedia:Substitution|substitution]] code shortcut {{tlxs|doc-code}}.
=== Categories and interwikis ===
Depending on where to the documentation is placed, it may be tricky to handle the categories and interwikis. See {{section link|Wikipedia:Template documentation#Categories and interwiki links}} for information about adding these.
== Technical details ==
=== Automatic functions ===
If the documentation page does not exist, the toolbar is replaced with a <code>[create]</code> link. It automatically [[mw:Manual:Creating pages with preloaded text|creates the page with preloaded text]] with the basic documentation syntax. Preload text is also used for the /sandbox and /testcases [create] links.
The preload page for the /doc <code>[create]</code> link is [[Template:Documentation/preload]]. The preload pages for the /sandbox and /testcases links are [[Template:Documentation/preload-sandbox]] and [[Template:Documentation/preload-testcases]]. The preload page for the /sandbox <code>[mirror]</code> link is [[Template:Documentation/mirror]].
This template also automatically adds {{tl|pp-template}} to a protected template page, so no need to manually add this template to protected pages.
When this template is on a /sandbox subpage it automatically adds the {{tl|Template sandbox notice}} template.
=== Link box features ===
Depending on the namespace, the link box may have less features, or may not show up at all. The following table shows this:
{| class="wikitable"
! Namespace
! Behavior
|-
| Template
| Full behavior
|-
| Module
| Full behavior, with the addition of a "create documentation" link when the page does not exist
|-
| User
| Full behavior
|-
| Other namespaces
| Hidden, unless {{para|1}} is specified (which will show "The above documentation is transcluded from {{param|1}}")
|}
Alongside that, if {{para|1}} or {{para|content}} is specified, the "Add categories to the /doc subpage" will not show.
=== Subject namespaces vs. talk namespaces ===
This template is usually placed in the [[WP:NS#Subject namespaces|subject namespace]]. But in some cases this template needs to be on the [[WP:TALKSPACE|Talk namespace]]:
* In the MediaWiki namespace, since {{tag|noinclude|o}} often does not work in system messages, and since the MediaWiki namespace needs to be kept clean for performance reasons.
When placed on talk pages, this template usually is placed near the top of the page and without {{tag|noinclude}} tags.
The /doc, /sandbox and /testcases pages should normally be in the subject namespace, except in the namespaces that do not have the MediaWiki [[meta:Help:Link#Subpage feature|subpage feature]] enabled: Main, File, and MediaWiki. (Categories can have subpages, but documentation is created in the Category talk namespace to prevent creating empty categories. There are also a whole bunch of other technical reasons why the /doc page must be stored under the talk page for those (but only those) namespaces.
This template automatically points its [create] links for the /doc, /sandbox and /testcases to the right namespace.
== Full syntax ==
<syntaxhighlight lang="wikitext">
{{Documentation}}
or
{{Documentation
| [path to documentation page]
}}
{{Documentation
| content =
}}
or
{{Documentation
| [path to documentation page]
| heading-style =
| heading =
| link box =
}}
or
{{Documentation
| [path to documentation page]
| content =
| heading-style =
| heading =
| link box =
| page =
}}
</syntaxhighlight>
=== Color scheme ===
{| class="wikitable" style="font-size:90%"
|+ Wikipedia background colors for {{Template link|documentation}} <small>([[Help:Using colors]])</small>
! !! RGB !! HSV !! Color !! General usage !! Note
|-
| A
| <kbd>#ECFCF4</kbd> || 150°, 6%, 99%
| style="background:#ECFCF4" |
| Sample || Current documentation background
|-
| B
| <kbd>#00FF80</kbd>
| style="font-size:90%;" | {{nowrap|1=Hue=150° <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}}
| style="background:#00FF80" |
| Basic hue || What we'd call ''the color''
|-
| colspan="6" |
|-
| 1
| <kbd>#A3BFB1</kbd> || 150°, 15%, 75%
| style="background:#A3BFB1" |
| Header border only ||
|-
| 2
| <kbd>#CEF2E0</kbd> || 150°, 15%, 95%
| style="background:#CEF2E0" |
| Main border; header background ||
|-
| 3
| <kbd>#E6FFF2</kbd> || 150°, 10%, 100%
| style="background:#E6FFF2" |
| 2nd header, accent colour ||
|-
| 4
| <kbd>#F5FFFA</kbd> || 150°, 4%, 100%
| style="background:#F5FFFA" |
| Main background || So saturation in A is a bit off
|}
{{collapse top|title=Colors for documentation navbox}}
As a suggestion, here are colors for a navbox intended for documentation pages only.
They follow the shading of regular blue navbox colors:
<syntaxhighlight lang="wikitext">
| titlestyle = background:#ccffe5
| basestyle = background:#ddffee
<!-- basestyle= sets groupstyle, abovestyle, belowstyle together -->
</syntaxhighlight>
For subgroups, in child navboxes:
<syntaxhighlight lang="wikitext">
{{Navbox|child
| groupstyle = background:#e6fff2
...
</syntaxhighlight>
Example:{{Template link expanded|Periodic table templates}}
{{collapse bottom}}
==See also==
* {{tl|Documentation subpage}}, a notice placed at the top of a /doc subpage explaining its role and including a link to the page it documents.
* {{tl|Barnstar documentation}}, a variant of {{tl|Documentation}} for use with [[Wikipedia:Barnstars|barnstar]] templates.
* [[Wikipedia:Template documentation]] is a how-to guide to template documentation.
* [[Wikipedia:Template sandbox and test cases]] explains the use of /sandbox and /testcases subpages and includes more information about template testing.
<includeonly><!-- Make sure that only page [[Template:Documentation]] is categorised. No other page (no subpages, not when transcluded).
-->{{#ifeq:{{FULLPAGENAME}}|Template:Documentation|
[[Category:Template documentation| ]]
[[Category:Template namespace templates|Documentation]]
}}</includeonly>
431959208b67db006bc22ce92572aa643072c326
Module:Navbox
828
94
204
2023-05-28T13:26:56Z
wikipedia>Uzume
0
strict
Scribunto
text/plain
require('strict')
local p = {}
local navbar = require('Module:Navbar')._navbar
local cfg = mw.loadData('Module:Navbox/configuration')
local getArgs -- lazily initialized
local args
local format = string.format
local function striped(wikitext, border)
-- Return wikitext with markers replaced for odd/even striping.
-- Child (subgroup) navboxes are flagged with a category that is removed
-- by parent navboxes. The result is that the category shows all pages
-- where a child navbox is not contained in a parent navbox.
local orphanCat = cfg.category.orphan
if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part
if args[cfg.arg.evenodd] then
if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then
first, second = second, first
else
first = args[cfg.arg.evenodd]
second = first
end
end
local changer
if first == second then
changer = first
else
local index = 0
changer = function (code)
if code == '0' then
-- Current occurrence is for a group before a nested table.
-- Set it to first as a valid although pointless class.
-- The next occurrence will be the first row after a title
-- in a subgroup and will also be first.
index = 0
return first
end
index = index + 1
return index % 2 == 1 and first or second
end
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count
end
local function processItem(item, nowrapitems)
if item:sub(1, 2) == '{|' then
-- Applying nowrap to lines in a table does not make sense.
-- Add newlines to compensate for trim of x in |parm=x in a template.
return '\n' .. item ..'\n'
end
if nowrapitems == cfg.keyword.nowrapitems_yes then
local lines = {}
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
if prefix and not content:match(cfg.pattern.nowrap) then
line = format(cfg.nowrap_item, prefix, content)
end
table.insert(lines, line)
end
item = table.concat(lines, '\n')
end
if item:match('^[*:;#]') then
return '\n' .. item ..'\n'
end
return item
end
local function has_navbar()
return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off
and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain
and (
args[cfg.arg.name]
or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '')
~= cfg.pattern.navbox
)
end
local function renderNavBar(titleCell)
if has_navbar() then
titleCell:wikitext(navbar{
[cfg.navbar.name] = args[cfg.arg.name],
[cfg.navbar.mini] = 1,
[cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' ..
(args[cfg.arg.titlestyle] or '') ..
';background:none transparent;border:none;box-shadow:none;padding:0;'
})
end
end
local function renderTitleRow(tbl)
if not args[cfg.arg.title] then return end
local titleRow = tbl:tag('tr')
local titleCell = titleRow:tag('th'):attr('scope', 'col')
local titleColspan = 2
if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end
if args[cfg.arg.image] then titleColspan = titleColspan + 1 end
titleCell
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.titlestyle])
:addClass(cfg.class.navbox_title)
:attr('colspan', titleColspan)
renderNavBar(titleCell)
titleCell
:tag('div')
-- id for aria-labelledby attribute
:attr('id', mw.uri.anchorEncode(args[cfg.arg.title]))
:addClass(args[cfg.arg.titleclass])
:css('font-size', '114%')
:css('margin', '0 4em')
:wikitext(processItem(args[cfg.arg.title]))
end
local function getAboveBelowColspan()
local ret = 2
if args[cfg.arg.imageleft] then ret = ret + 1 end
if args[cfg.arg.image] then ret = ret + 1 end
return ret
end
local function renderAboveRow(tbl)
if not args[cfg.arg.above] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.aboveclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.abovestyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
-- id for aria-labelledby attribute, if no title
:attr('id', (not args[cfg.arg.title]) and mw.uri.anchorEncode(args[cfg.arg.above]) or nil)
:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))
end
local function renderBelowRow(tbl)
if not args[cfg.arg.below] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.belowclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.belowstyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))
end
local function renderListRow(tbl, index, listnum, listnums_size)
local row = tbl:tag('tr')
if index == 1 and args[cfg.arg.imageleft] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 2px 0 0')
:cssText(args[cfg.arg.imageleftstyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.imageleft]))
end
local group_and_num = format(cfg.arg.group_and_num, listnum)
local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
if args[group_and_num] then
local groupCell = row:tag('th')
-- id for aria-labelledby attribute, if lone group with no title or above
if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
groupCell
:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
end
groupCell
:attr('scope', 'row')
:addClass(cfg.class.navbox_group)
:addClass(args[cfg.arg.groupclass])
:cssText(args[cfg.arg.basestyle])
-- If groupwidth not specified, minimize width
:css('width', args[cfg.arg.groupwidth] or '1%')
groupCell
:cssText(args[cfg.arg.groupstyle])
:cssText(args[groupstyle_and_num])
:wikitext(args[group_and_num])
end
local listCell = row:tag('td')
if args[group_and_num] then
listCell
:addClass(cfg.class.navbox_list_with_group)
else
listCell:attr('colspan', 2)
end
if not args[cfg.arg.groupwidth] then
listCell:css('width', '100%')
end
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing
if index % 2 == 1 then
rowstyle = args[cfg.arg.oddstyle]
else
rowstyle = args[cfg.arg.evenstyle]
end
local list_and_num = format(cfg.arg.list_and_num, listnum)
local listText = args[list_and_num]
local oddEven = cfg.marker.oddeven
if listText:sub(1, 12) == '</div><table' then
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
end
local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)
listCell
:css('padding', '0')
:cssText(args[cfg.arg.liststyle])
:cssText(rowstyle)
:cssText(args[liststyle_and_num])
:addClass(cfg.class.navbox_list)
:addClass(cfg.class.navbox_part .. oddEven)
:addClass(args[cfg.arg.listclass])
:addClass(args[listclass_and_num])
:tag('div')
:css('padding',
(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em'
)
:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))
if index == 1 and args[cfg.arg.image] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 0 0 2px')
:cssText(args[cfg.arg.imagestyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.image]))
end
end
local function has_list_class(htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, _ in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles()
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles)
local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar() and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because most navboxes will emit only
-- one of these classes [hlist_note]
return hlist_styles .. plainlist_styles
end
local function needsHorizontalLists(border)
if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then
return false
end
return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)
end
local function hasBackgroundColors()
for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,
cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('background', 1, true) then
return true
end
end
return false
end
local function hasBorders()
for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,
cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('border', 1, true) then
return true
end
end
return false
end
local function isIllegible()
local styleratio = require('Module:Color contrast')._styleratio
for key, style in pairs(args) do
if tostring(key):match(cfg.pattern.style) then
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
return true
end
end
end
return false
end
local function getTrackingCategories(border)
local cats = {}
if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end
if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end
if isIllegible() then table.insert(cats, cfg.category.illegible) end
if hasBorders() then table.insert(cats, cfg.category.borders) end
return cats
end
local function renderTrackingCategories(builder, border)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox
or subpage == cfg.keyword.subpage_testcases then return end
for _, cat in ipairs(getTrackingCategories(border)) do
builder:wikitext('[[Category:' .. cat .. ']]')
end
end
local function renderMainTable(border, listnums)
local tbl = mw.html.create('table')
:addClass(cfg.class.nowraplinks)
:addClass(args[cfg.arg.bodyclass])
local state = args[cfg.arg.state]
if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then
if state == cfg.keyword.state_collapsed then
state = cfg.class.collapsed
end
tbl
:addClass(cfg.class.collapsible)
:addClass(state or cfg.class.autocollapse)
end
tbl:css('border-spacing', 0)
if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then
tbl
:addClass(cfg.class.navbox_subgroup)
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
else -- regular navbox - bodystyle and style will be applied to the wrapper table
tbl
:addClass(cfg.class.navbox_inner)
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args[cfg.arg.innerstyle])
renderTitleRow(tbl)
renderAboveRow(tbl)
local listnums_size = #listnums
for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum, listnums_size)
end
renderBelowRow(tbl)
return tbl
end
local function add_navbox_styles(hiding_templatestyles)
local frame = mw.getCurrentFrame()
-- This is a lambda so that it doesn't need the frame as a parameter
local function add_user_styles(templatestyles)
if templatestyles and templatestyles ~= '' then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
end
return ''
end
-- get templatestyles. load base from config so that Lua only needs to do
-- the work once of parser tag expansion
local base_templatestyles = cfg.templatestyles
local templatestyles = add_user_styles(args[cfg.arg.templatestyles])
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])
-- The 'navbox-styles' div exists to wrap the styles to work around T200206
-- more elegantly. Instead of combinatorial rules, this ends up being linear
-- number of CSS rules.
return mw.html.create('div')
:addClass(cfg.class.navbox_styles)
:wikitext(
add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles'
base_templatestyles ..
templatestyles ..
child_templatestyles ..
table.concat(hiding_templatestyles)
)
:done()
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
function p._navbox(navboxArgs)
args = navboxArgs
local hiding_templatestyles = move_hiding_templatestyles(args)
local listnums = {}
for k, _ in pairs(args) do
if type(k) == 'string' then
local listnum = k:match(cfg.pattern.listnum)
if listnum then table.insert(listnums, tonumber(listnum)) end
end
end
table.sort(listnums)
local border = mw.text.trim(args[cfg.arg.border] or args[1] or '')
if border == cfg.keyword.border_child then
border = cfg.keyword.border_subgroup
end
-- render the main body of the navbox
local tbl = renderMainTable(border, listnums)
local res = mw.html.create()
-- render the appropriate wrapper for the navbox, based on the border param
if border == cfg.keyword.border_none then
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]
and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(
args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]
)
)
else
nav:attr('aria-label', cfg.aria_label)
end
elseif border == cfg.keyword.border_subgroup then
-- We assume that this navbox is being rendered in a list cell of a
-- parent navbox, and is therefore inside a div with padding:0em 0.25em.
-- We start with a </div> to avoid the padding being applied, and at the
-- end add a <div> to balance out the parent's </div>
res
:wikitext('</div>')
:node(tbl)
:wikitext('<div>')
else
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass(cfg.class.navbox)
:addClass(args[cfg.arg.navboxclass])
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
:css('padding', '3px')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above]
or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1])
)
else
nav:attr('aria-label', cfg.aria_label)
end
end
if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then
renderTrackingCategories(res, border)
end
return striped(tostring(res), border)
end
function p.navbox(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame, {wrappers = {cfg.pattern.navbox}})
-- Read the arguments in the order they'll be output in, to make references
-- number in the right order.
local _
_ = args[cfg.arg.title]
_ = args[cfg.arg.above]
-- Limit this to 20 as covering 'most' cases (that's a SWAG) and because
-- iterator approach won't work here
for i = 1, 20 do
_ = args[format(cfg.arg.group_and_num, i)]
_ = args[format(cfg.arg.list_and_num, i)]
end
_ = args[cfg.arg.below]
return p._navbox(args)
end
return p
05be9a97c035ab3f0fac69423779e261949d473c
Module:Language/data/iana languages
828
240
704
2023-05-28T16:32:43Z
wikipedia>Trappist the monk
0
update to 2023-05-11 data;
Scribunto
text/plain
-- File-Date: 2023-05-11
local active = {
["aa"] = {"Afar"},
["ab"] = {"Abkhazian"},
["ae"] = {"Avestan"},
["af"] = {"Afrikaans"},
["ak"] = {"Akan"},
["am"] = {"Amharic"},
["an"] = {"Aragonese"},
["ar"] = {"Arabic"},
["as"] = {"Assamese"},
["av"] = {"Avaric"},
["ay"] = {"Aymara"},
["az"] = {"Azerbaijani"},
["ba"] = {"Bashkir"},
["be"] = {"Belarusian"},
["bg"] = {"Bulgarian"},
["bh"] = {"Bihari languages"},
["bi"] = {"Bislama"},
["bm"] = {"Bambara"},
["bn"] = {"Bengali", "Bangla"},
["bo"] = {"Tibetan"},
["br"] = {"Breton"},
["bs"] = {"Bosnian"},
["ca"] = {"Catalan", "Valencian"},
["ce"] = {"Chechen"},
["ch"] = {"Chamorro"},
["co"] = {"Corsican"},
["cr"] = {"Cree"},
["cs"] = {"Czech"},
["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"},
["cv"] = {"Chuvash"},
["cy"] = {"Welsh"},
["da"] = {"Danish"},
["de"] = {"German"},
["dv"] = {"Dhivehi", "Divehi", "Maldivian"},
["dz"] = {"Dzongkha"},
["ee"] = {"Ewe"},
["el"] = {"Modern Greek (1453-)"},
["en"] = {"English"},
["eo"] = {"Esperanto"},
["es"] = {"Spanish", "Castilian"},
["et"] = {"Estonian"},
["eu"] = {"Basque"},
["fa"] = {"Persian"},
["ff"] = {"Fulah"},
["fi"] = {"Finnish"},
["fj"] = {"Fijian"},
["fo"] = {"Faroese"},
["fr"] = {"French"},
["fy"] = {"Western Frisian"},
["ga"] = {"Irish"},
["gd"] = {"Scottish Gaelic", "Gaelic"},
["gl"] = {"Galician"},
["gn"] = {"Guarani"},
["gu"] = {"Gujarati"},
["gv"] = {"Manx"},
["ha"] = {"Hausa"},
["he"] = {"Hebrew"},
["hi"] = {"Hindi"},
["ho"] = {"Hiri Motu"},
["hr"] = {"Croatian"},
["ht"] = {"Haitian", "Haitian Creole"},
["hu"] = {"Hungarian"},
["hy"] = {"Armenian"},
["hz"] = {"Herero"},
["ia"] = {"Interlingua (International Auxiliary Language Association)"},
["id"] = {"Indonesian"},
["ie"] = {"Interlingue", "Occidental"},
["ig"] = {"Igbo"},
["ii"] = {"Sichuan Yi", "Nuosu"},
["ik"] = {"Inupiaq"},
["io"] = {"Ido"},
["is"] = {"Icelandic"},
["it"] = {"Italian"},
["iu"] = {"Inuktitut"},
["ja"] = {"Japanese"},
["jv"] = {"Javanese"},
["ka"] = {"Georgian"},
["kg"] = {"Kongo"},
["ki"] = {"Kikuyu", "Gikuyu"},
["kj"] = {"Kuanyama", "Kwanyama"},
["kk"] = {"Kazakh"},
["kl"] = {"Kalaallisut", "Greenlandic"},
["km"] = {"Khmer", "Central Khmer"},
["kn"] = {"Kannada"},
["ko"] = {"Korean"},
["kr"] = {"Kanuri"},
["ks"] = {"Kashmiri"},
["ku"] = {"Kurdish"},
["kv"] = {"Komi"},
["kw"] = {"Cornish"},
["ky"] = {"Kirghiz", "Kyrgyz"},
["la"] = {"Latin"},
["lb"] = {"Luxembourgish", "Letzeburgesch"},
["lg"] = {"Ganda", "Luganda"},
["li"] = {"Limburgan", "Limburger", "Limburgish"},
["ln"] = {"Lingala"},
["lo"] = {"Lao"},
["lt"] = {"Lithuanian"},
["lu"] = {"Luba-Katanga"},
["lv"] = {"Latvian"},
["mg"] = {"Malagasy"},
["mh"] = {"Marshallese"},
["mi"] = {"Maori"},
["mk"] = {"Macedonian"},
["ml"] = {"Malayalam"},
["mn"] = {"Mongolian"},
["mr"] = {"Marathi"},
["ms"] = {"Malay (macrolanguage)"},
["mt"] = {"Maltese"},
["my"] = {"Burmese"},
["na"] = {"Nauru"},
["nb"] = {"Norwegian Bokmål"},
["nd"] = {"North Ndebele"},
["ne"] = {"Nepali (macrolanguage)"},
["ng"] = {"Ndonga"},
["nl"] = {"Dutch", "Flemish"},
["nn"] = {"Norwegian Nynorsk"},
["no"] = {"Norwegian"},
["nr"] = {"South Ndebele"},
["nv"] = {"Navajo", "Navaho"},
["ny"] = {"Nyanja", "Chewa", "Chichewa"},
["oc"] = {"Occitan (post 1500)"},
["oj"] = {"Ojibwa"},
["om"] = {"Oromo"},
["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"},
["os"] = {"Ossetian", "Ossetic"},
["pa"] = {"Panjabi", "Punjabi"},
["pi"] = {"Pali"},
["pl"] = {"Polish"},
["ps"] = {"Pushto", "Pashto"},
["pt"] = {"Portuguese"},
["qu"] = {"Quechua"},
["rm"] = {"Romansh"},
["rn"] = {"Rundi"},
["ro"] = {"Romanian", "Moldavian", "Moldovan"},
["ru"] = {"Russian"},
["rw"] = {"Kinyarwanda"},
["sa"] = {"Sanskrit"},
["sc"] = {"Sardinian"},
["sd"] = {"Sindhi"},
["se"] = {"Northern Sami"},
["sg"] = {"Sango"},
["sh"] = {"Serbo-Croatian"},
["si"] = {"Sinhala", "Sinhalese"},
["sk"] = {"Slovak"},
["sl"] = {"Slovenian"},
["sm"] = {"Samoan"},
["sn"] = {"Shona"},
["so"] = {"Somali"},
["sq"] = {"Albanian"},
["sr"] = {"Serbian"},
["ss"] = {"Swati"},
["st"] = {"Southern Sotho"},
["su"] = {"Sundanese"},
["sv"] = {"Swedish"},
["sw"] = {"Swahili (macrolanguage)"},
["ta"] = {"Tamil"},
["te"] = {"Telugu"},
["tg"] = {"Tajik"},
["th"] = {"Thai"},
["ti"] = {"Tigrinya"},
["tk"] = {"Turkmen"},
["tl"] = {"Tagalog"},
["tn"] = {"Tswana"},
["to"] = {"Tonga (Tonga Islands)"},
["tr"] = {"Turkish"},
["ts"] = {"Tsonga"},
["tt"] = {"Tatar"},
["tw"] = {"Twi"},
["ty"] = {"Tahitian"},
["ug"] = {"Uighur", "Uyghur"},
["uk"] = {"Ukrainian"},
["ur"] = {"Urdu"},
["uz"] = {"Uzbek"},
["ve"] = {"Venda"},
["vi"] = {"Vietnamese"},
["vo"] = {"Volapük"},
["wa"] = {"Walloon"},
["wo"] = {"Wolof"},
["xh"] = {"Xhosa"},
["yi"] = {"Yiddish"},
["yo"] = {"Yoruba"},
["za"] = {"Zhuang", "Chuang"},
["zh"] = {"Chinese"},
["zu"] = {"Zulu"},
["aaa"] = {"Ghotuo"},
["aab"] = {"Alumu-Tesu"},
["aac"] = {"Ari"},
["aad"] = {"Amal"},
["aae"] = {"Arbëreshë Albanian"},
["aaf"] = {"Aranadan"},
["aag"] = {"Ambrak"},
["aah"] = {"Abu' Arapesh"},
["aai"] = {"Arifama-Miniafia"},
["aak"] = {"Ankave"},
["aal"] = {"Afade"},
["aan"] = {"Anambé"},
["aao"] = {"Algerian Saharan Arabic"},
["aap"] = {"Pará Arára"},
["aaq"] = {"Eastern Abnaki"},
["aas"] = {"Aasáx"},
["aat"] = {"Arvanitika Albanian"},
["aau"] = {"Abau"},
["aav"] = {"Austro-Asiatic languages"},
["aaw"] = {"Solong"},
["aax"] = {"Mandobo Atas"},
["aaz"] = {"Amarasi"},
["aba"] = {"Abé"},
["abb"] = {"Bankon"},
["abc"] = {"Ambala Ayta"},
["abd"] = {"Manide"},
["abe"] = {"Western Abnaki"},
["abf"] = {"Abai Sungai"},
["abg"] = {"Abaga"},
["abh"] = {"Tajiki Arabic"},
["abi"] = {"Abidji"},
["abj"] = {"Aka-Bea"},
["abl"] = {"Lampung Nyo"},
["abm"] = {"Abanyom"},
["abn"] = {"Abua"},
["abo"] = {"Abon"},
["abp"] = {"Abellen Ayta"},
["abq"] = {"Abaza"},
["abr"] = {"Abron"},
["abs"] = {"Ambonese Malay"},
["abt"] = {"Ambulas"},
["abu"] = {"Abure"},
["abv"] = {"Baharna Arabic"},
["abw"] = {"Pal"},
["abx"] = {"Inabaknon"},
["aby"] = {"Aneme Wake"},
["abz"] = {"Abui"},
["aca"] = {"Achagua"},
["acb"] = {"Áncá"},
["acd"] = {"Gikyode"},
["ace"] = {"Achinese"},
["acf"] = {"Saint Lucian Creole French"},
["ach"] = {"Acoli"},
["aci"] = {"Aka-Cari"},
["ack"] = {"Aka-Kora"},
["acl"] = {"Akar-Bale"},
["acm"] = {"Mesopotamian Arabic"},
["acn"] = {"Achang"},
["acp"] = {"Eastern Acipa"},
["acq"] = {"Ta'izzi-Adeni Arabic"},
["acr"] = {"Achi"},
["acs"] = {"Acroá"},
["act"] = {"Achterhoeks"},
["acu"] = {"Achuar-Shiwiar"},
["acv"] = {"Achumawi"},
["acw"] = {"Hijazi Arabic"},
["acx"] = {"Omani Arabic"},
["acy"] = {"Cypriot Arabic"},
["acz"] = {"Acheron"},
["ada"] = {"Adangme"},
["adb"] = {"Atauran"},
["add"] = {"Lidzonka", "Dzodinka"},
["ade"] = {"Adele"},
["adf"] = {"Dhofari Arabic"},
["adg"] = {"Andegerebinha"},
["adh"] = {"Adhola"},
["adi"] = {"Adi"},
["adj"] = {"Adioukrou"},
["adl"] = {"Galo"},
["adn"] = {"Adang"},
["ado"] = {"Abu"},
["adq"] = {"Adangbe"},
["adr"] = {"Adonara"},
["ads"] = {"Adamorobe Sign Language"},
["adt"] = {"Adnyamathanha"},
["adu"] = {"Aduge"},
["adw"] = {"Amundava"},
["adx"] = {"Amdo Tibetan"},
["ady"] = {"Adyghe", "Adygei"},
["adz"] = {"Adzera"},
["aea"] = {"Areba"},
["aeb"] = {"Tunisian Arabic"},
["aec"] = {"Saidi Arabic"},
["aed"] = {"Argentine Sign Language"},
["aee"] = {"Northeast Pashai", "Northeast Pashayi"},
["aek"] = {"Haeke"},
["ael"] = {"Ambele"},
["aem"] = {"Arem"},
["aen"] = {"Armenian Sign Language"},
["aeq"] = {"Aer"},
["aer"] = {"Eastern Arrernte"},
["aes"] = {"Alsea"},
["aeu"] = {"Akeu"},
["aew"] = {"Ambakich"},
["aey"] = {"Amele"},
["aez"] = {"Aeka"},
["afa"] = {"Afro-Asiatic languages"},
["afb"] = {"Gulf Arabic"},
["afd"] = {"Andai"},
["afe"] = {"Putukwam"},
["afg"] = {"Afghan Sign Language"},
["afh"] = {"Afrihili"},
["afi"] = {"Akrukay", "Chini"},
["afk"] = {"Nanubae"},
["afn"] = {"Defaka"},
["afo"] = {"Eloyi"},
["afp"] = {"Tapei"},
["afs"] = {"Afro-Seminole Creole"},
["aft"] = {"Afitti"},
["afu"] = {"Awutu"},
["afz"] = {"Obokuitai"},
["aga"] = {"Aguano"},
["agb"] = {"Legbo"},
["agc"] = {"Agatu"},
["agd"] = {"Agarabi"},
["age"] = {"Angal"},
["agf"] = {"Arguni"},
["agg"] = {"Angor"},
["agh"] = {"Ngelima"},
["agi"] = {"Agariya"},
["agj"] = {"Argobba"},
["agk"] = {"Isarog Agta"},
["agl"] = {"Fembe"},
["agm"] = {"Angaataha"},
["agn"] = {"Agutaynen"},
["ago"] = {"Tainae"},
["agq"] = {"Aghem"},
["agr"] = {"Aguaruna"},
["ags"] = {"Esimbi"},
["agt"] = {"Central Cagayan Agta"},
["agu"] = {"Aguacateco"},
["agv"] = {"Remontado Dumagat"},
["agw"] = {"Kahua"},
["agx"] = {"Aghul"},
["agy"] = {"Southern Alta"},
["agz"] = {"Mt. Iriga Agta"},
["aha"] = {"Ahanta"},
["ahb"] = {"Axamb"},
["ahg"] = {"Qimant"},
["ahh"] = {"Aghu"},
["ahi"] = {"Tiagbamrin Aizi"},
["ahk"] = {"Akha"},
["ahl"] = {"Igo"},
["ahm"] = {"Mobumrin Aizi"},
["ahn"] = {"Àhàn"},
["aho"] = {"Ahom"},
["ahp"] = {"Aproumu Aizi"},
["ahr"] = {"Ahirani"},
["ahs"] = {"Ashe"},
["aht"] = {"Ahtena"},
["aia"] = {"Arosi"},
["aib"] = {"Ainu (China)"},
["aic"] = {"Ainbai"},
["aid"] = {"Alngith"},
["aie"] = {"Amara"},
["aif"] = {"Agi"},
["aig"] = {"Antigua and Barbuda Creole English"},
["aih"] = {"Ai-Cham"},
["aii"] = {"Assyrian Neo-Aramaic"},
["aij"] = {"Lishanid Noshan"},
["aik"] = {"Ake"},
["ail"] = {"Aimele"},
["aim"] = {"Aimol"},
["ain"] = {"Ainu (Japan)"},
["aio"] = {"Aiton"},
["aip"] = {"Burumakok"},
["aiq"] = {"Aimaq"},
["air"] = {"Airoran"},
["ait"] = {"Arikem"},
["aiw"] = {"Aari"},
["aix"] = {"Aighon"},
["aiy"] = {"Ali"},
["aja"] = {"Aja (South Sudan)"},
["ajg"] = {"Aja (Benin)"},
["aji"] = {"Ajië"},
["ajn"] = {"Andajin"},
["ajs"] = {"Algerian Jewish Sign Language"},
["aju"] = {"Judeo-Moroccan Arabic"},
["ajw"] = {"Ajawa"},
["ajz"] = {"Amri Karbi"},
["akb"] = {"Batak Angkola"},
["akc"] = {"Mpur"},
["akd"] = {"Ukpet-Ehom"},
["ake"] = {"Akawaio"},
["akf"] = {"Akpa"},
["akg"] = {"Anakalangu"},
["akh"] = {"Angal Heneng"},
["aki"] = {"Aiome"},
["akj"] = {"Aka-Jeru"},
["akk"] = {"Akkadian"},
["akl"] = {"Aklanon"},
["akm"] = {"Aka-Bo"},
["ako"] = {"Akurio"},
["akp"] = {"Siwu"},
["akq"] = {"Ak"},
["akr"] = {"Araki"},
["aks"] = {"Akaselem"},
["akt"] = {"Akolet"},
["aku"] = {"Akum"},
["akv"] = {"Akhvakh"},
["akw"] = {"Akwa"},
["akx"] = {"Aka-Kede"},
["aky"] = {"Aka-Kol"},
["akz"] = {"Alabama"},
["ala"] = {"Alago"},
["alc"] = {"Qawasqar"},
["ald"] = {"Alladian"},
["ale"] = {"Aleut"},
["alf"] = {"Alege"},
["alg"] = {"Algonquian languages"},
["alh"] = {"Alawa"},
["ali"] = {"Amaimon"},
["alj"] = {"Alangan"},
["alk"] = {"Alak"},
["all"] = {"Allar"},
["alm"] = {"Amblong"},
["aln"] = {"Gheg Albanian"},
["alo"] = {"Larike-Wakasihu"},
["alp"] = {"Alune"},
["alq"] = {"Algonquin"},
["alr"] = {"Alutor"},
["als"] = {"Tosk Albanian"},
["alt"] = {"Southern Altai"},
["alu"] = {"'Are'are"},
["alv"] = {"Atlantic-Congo languages"},
["alw"] = {"Alaba-K’abeena", "Wanbasana"},
["alx"] = {"Amol"},
["aly"] = {"Alyawarr"},
["alz"] = {"Alur"},
["ama"] = {"Amanayé"},
["amb"] = {"Ambo"},
["amc"] = {"Amahuaca"},
["ame"] = {"Yanesha'"},
["amf"] = {"Hamer-Banna"},
["amg"] = {"Amurdak"},
["ami"] = {"Amis"},
["amj"] = {"Amdang"},
["amk"] = {"Ambai"},
["aml"] = {"War-Jaintia"},
["amm"] = {"Ama (Papua New Guinea)"},
["amn"] = {"Amanab"},
["amo"] = {"Amo"},
["amp"] = {"Alamblak"},
["amq"] = {"Amahai"},
["amr"] = {"Amarakaeri"},
["ams"] = {"Southern Amami-Oshima"},
["amt"] = {"Amto"},
["amu"] = {"Guerrero Amuzgo"},
["amv"] = {"Ambelau"},
["amw"] = {"Western Neo-Aramaic"},
["amx"] = {"Anmatyerre"},
["amy"] = {"Ami"},
["amz"] = {"Atampaya"},
["ana"] = {"Andaqui"},
["anb"] = {"Andoa"},
["anc"] = {"Ngas"},
["and"] = {"Ansus"},
["ane"] = {"Xârâcùù"},
["anf"] = {"Animere"},
["ang"] = {"Old English (ca. 450-1100)"},
["anh"] = {"Nend"},
["ani"] = {"Andi"},
["anj"] = {"Anor"},
["ank"] = {"Goemai"},
["anl"] = {"Anu-Hkongso Chin"},
["anm"] = {"Anal"},
["ann"] = {"Obolo"},
["ano"] = {"Andoque"},
["anp"] = {"Angika"},
["anq"] = {"Jarawa (India)"},
["anr"] = {"Andh"},
["ans"] = {"Anserma"},
["ant"] = {"Antakarinya", "Antikarinya"},
["anu"] = {"Anuak"},
["anv"] = {"Denya"},
["anw"] = {"Anaang"},
["anx"] = {"Andra-Hus"},
["any"] = {"Anyin"},
["anz"] = {"Anem"},
["aoa"] = {"Angolar"},
["aob"] = {"Abom"},
["aoc"] = {"Pemon"},
["aod"] = {"Andarum"},
["aoe"] = {"Angal Enen"},
["aof"] = {"Bragat"},
["aog"] = {"Angoram"},
["aoi"] = {"Anindilyakwa"},
["aoj"] = {"Mufian"},
["aok"] = {"Arhö"},
["aol"] = {"Alor"},
["aom"] = {"Ömie"},
["aon"] = {"Bumbita Arapesh"},
["aor"] = {"Aore"},
["aos"] = {"Taikat"},
["aot"] = {"Atong (India)", "A'tong"},
["aou"] = {"A'ou"},
["aox"] = {"Atorada"},
["aoz"] = {"Uab Meto"},
["apa"] = {"Apache languages"},
["apb"] = {"Sa'a"},
["apc"] = {"Levantine Arabic"},
["apd"] = {"Sudanese Arabic"},
["ape"] = {"Bukiyip"},
["apf"] = {"Pahanan Agta"},
["apg"] = {"Ampanang"},
["aph"] = {"Athpariya"},
["api"] = {"Apiaká"},
["apj"] = {"Jicarilla Apache"},
["apk"] = {"Kiowa Apache"},
["apl"] = {"Lipan Apache"},
["apm"] = {"Mescalero-Chiricahua Apache"},
["apn"] = {"Apinayé"},
["apo"] = {"Ambul"},
["app"] = {"Apma"},
["apq"] = {"A-Pucikwar"},
["apr"] = {"Arop-Lokep"},
["aps"] = {"Arop-Sissano"},
["apt"] = {"Apatani"},
["apu"] = {"Apurinã"},
["apv"] = {"Alapmunte"},
["apw"] = {"Western Apache"},
["apx"] = {"Aputai"},
["apy"] = {"Apalaí"},
["apz"] = {"Safeyoka"},
["aqa"] = {"Alacalufan languages"},
["aqc"] = {"Archi"},
["aqd"] = {"Ampari Dogon"},
["aqg"] = {"Arigidi"},
["aqk"] = {"Aninka"},
["aql"] = {"Algic languages"},
["aqm"] = {"Atohwaim"},
["aqn"] = {"Northern Alta"},
["aqp"] = {"Atakapa"},
["aqr"] = {"Arhâ"},
["aqt"] = {"Angaité"},
["aqz"] = {"Akuntsu"},
["arb"] = {"Standard Arabic"},
["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"},
["ard"] = {"Arabana"},
["are"] = {"Western Arrarnta"},
["arh"] = {"Arhuaco"},
["ari"] = {"Arikara"},
["arj"] = {"Arapaso"},
["ark"] = {"Arikapú"},
["arl"] = {"Arabela"},
["arn"] = {"Mapudungun", "Mapuche"},
["aro"] = {"Araona"},
["arp"] = {"Arapaho"},
["arq"] = {"Algerian Arabic"},
["arr"] = {"Karo (Brazil)"},
["ars"] = {"Najdi Arabic"},
["art"] = {"Artificial languages"},
["aru"] = {"Aruá (Amazonas State)", "Arawá"},
["arv"] = {"Arbore"},
["arw"] = {"Arawak"},
["arx"] = {"Aruá (Rodonia State)"},
["ary"] = {"Moroccan Arabic"},
["arz"] = {"Egyptian Arabic"},
["asa"] = {"Asu (Tanzania)"},
["asb"] = {"Assiniboine"},
["asc"] = {"Casuarina Coast Asmat"},
["ase"] = {"American Sign Language"},
["asf"] = {"Auslan", "Australian Sign Language"},
["asg"] = {"Cishingini"},
["ash"] = {"Abishira"},
["asi"] = {"Buruwai"},
["asj"] = {"Sari"},
["ask"] = {"Ashkun"},
["asl"] = {"Asilulu"},
["asn"] = {"Xingú Asuriní"},
["aso"] = {"Dano"},
["asp"] = {"Algerian Sign Language"},
["asq"] = {"Austrian Sign Language"},
["asr"] = {"Asuri"},
["ass"] = {"Ipulo"},
["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"},
["asu"] = {"Tocantins Asurini"},
["asv"] = {"Asoa"},
["asw"] = {"Australian Aborigines Sign Language"},
["asx"] = {"Muratayak"},
["asy"] = {"Yaosakor Asmat"},
["asz"] = {"As"},
["ata"] = {"Pele-Ata"},
["atb"] = {"Zaiwa"},
["atc"] = {"Atsahuaca"},
["atd"] = {"Ata Manobo"},
["ate"] = {"Atemble"},
["atg"] = {"Ivbie North-Okpela-Arhe"},
["ath"] = {"Athapascan languages"},
["ati"] = {"Attié"},
["atj"] = {"Atikamekw"},
["atk"] = {"Ati"},
["atl"] = {"Mt. Iraya Agta"},
["atm"] = {"Ata"},
["atn"] = {"Ashtiani"},
["ato"] = {"Atong (Cameroon)"},
["atp"] = {"Pudtol Atta"},
["atq"] = {"Aralle-Tabulahan"},
["atr"] = {"Waimiri-Atroari"},
["ats"] = {"Gros Ventre"},
["att"] = {"Pamplona Atta"},
["atu"] = {"Reel"},
["atv"] = {"Northern Altai"},
["atw"] = {"Atsugewi"},
["atx"] = {"Arutani"},
["aty"] = {"Aneityum"},
["atz"] = {"Arta"},
["aua"] = {"Asumboa"},
["aub"] = {"Alugu"},
["auc"] = {"Waorani"},
["aud"] = {"Anuta"},
["auf"] = {"Arauan languages"},
["aug"] = {"Aguna"},
["auh"] = {"Aushi"},
["aui"] = {"Anuki"},
["auj"] = {"Awjilah"},
["auk"] = {"Heyo"},
["aul"] = {"Aulua"},
["aum"] = {"Asu (Nigeria)"},
["aun"] = {"Molmo One"},
["auo"] = {"Auyokawa"},
["aup"] = {"Makayam"},
["auq"] = {"Anus", "Korur"},
["aur"] = {"Aruek"},
["aus"] = {"Australian languages"},
["aut"] = {"Austral"},
["auu"] = {"Auye"},
["auw"] = {"Awyi"},
["aux"] = {"Aurá"},
["auy"] = {"Awiyaana"},
["auz"] = {"Uzbeki Arabic"},
["avb"] = {"Avau"},
["avd"] = {"Alviri-Vidari"},
["avi"] = {"Avikam"},
["avk"] = {"Kotava"},
["avl"] = {"Eastern Egyptian Bedawi Arabic"},
["avm"] = {"Angkamuthi"},
["avn"] = {"Avatime"},
["avo"] = {"Agavotaguerra"},
["avs"] = {"Aushiri"},
["avt"] = {"Au"},
["avu"] = {"Avokaya"},
["avv"] = {"Avá-Canoeiro"},
["awa"] = {"Awadhi"},
["awb"] = {"Awa (Papua New Guinea)"},
["awc"] = {"Cicipu"},
["awd"] = {"Arawakan languages"},
["awe"] = {"Awetí"},
["awg"] = {"Anguthimri"},
["awh"] = {"Awbono"},
["awi"] = {"Aekyom"},
["awk"] = {"Awabakal"},
["awm"] = {"Arawum"},
["awn"] = {"Awngi"},
["awo"] = {"Awak"},
["awr"] = {"Awera"},
["aws"] = {"South Awyu"},
["awt"] = {"Araweté"},
["awu"] = {"Central Awyu"},
["awv"] = {"Jair Awyu"},
["aww"] = {"Awun"},
["awx"] = {"Awara"},
["awy"] = {"Edera Awyu"},
["axb"] = {"Abipon"},
["axe"] = {"Ayerrerenge"},
["axg"] = {"Mato Grosso Arára"},
["axk"] = {"Yaka (Central African Republic)"},
["axl"] = {"Lower Southern Aranda"},
["axm"] = {"Middle Armenian"},
["axx"] = {"Xârâgurè"},
["aya"] = {"Awar"},
["ayb"] = {"Ayizo Gbe"},
["ayc"] = {"Southern Aymara"},
["ayd"] = {"Ayabadhu"},
["aye"] = {"Ayere"},
["ayg"] = {"Ginyanga"},
["ayh"] = {"Hadrami Arabic"},
["ayi"] = {"Leyigha"},
["ayk"] = {"Akuku"},
["ayl"] = {"Libyan Arabic"},
["ayn"] = {"Sanaani Arabic"},
["ayo"] = {"Ayoreo"},
["ayp"] = {"North Mesopotamian Arabic"},
["ayq"] = {"Ayi (Papua New Guinea)"},
["ayr"] = {"Central Aymara"},
["ays"] = {"Sorsogon Ayta"},
["ayt"] = {"Magbukun Ayta"},
["ayu"] = {"Ayu"},
["ayz"] = {"Mai Brat"},
["aza"] = {"Azha"},
["azb"] = {"South Azerbaijani"},
["azc"] = {"Uto-Aztecan languages"},
["azd"] = {"Eastern Durango Nahuatl"},
["azg"] = {"San Pedro Amuzgos Amuzgo"},
["azj"] = {"North Azerbaijani"},
["azm"] = {"Ipalapa Amuzgo"},
["azn"] = {"Western Durango Nahuatl"},
["azo"] = {"Awing"},
["azt"] = {"Faire Atta"},
["azz"] = {"Highland Puebla Nahuatl"},
["baa"] = {"Babatana"},
["bab"] = {"Bainouk-Gunyuño"},
["bac"] = {"Badui"},
["bad"] = {"Banda languages"},
["bae"] = {"Baré"},
["baf"] = {"Nubaca"},
["bag"] = {"Tuki"},
["bah"] = {"Bahamas Creole English"},
["bai"] = {"Bamileke languages"},
["baj"] = {"Barakai"},
["bal"] = {"Baluchi"},
["ban"] = {"Balinese"},
["bao"] = {"Waimaha"},
["bap"] = {"Bantawa"},
["bar"] = {"Bavarian"},
["bas"] = {"Basa (Cameroon)"},
["bat"] = {"Baltic languages"},
["bau"] = {"Bada (Nigeria)"},
["bav"] = {"Vengo"},
["baw"] = {"Bambili-Bambui"},
["bax"] = {"Bamun"},
["bay"] = {"Batuley"},
["bba"] = {"Baatonum"},
["bbb"] = {"Barai"},
["bbc"] = {"Batak Toba"},
["bbd"] = {"Bau"},
["bbe"] = {"Bangba"},
["bbf"] = {"Baibai"},
["bbg"] = {"Barama"},
["bbh"] = {"Bugan"},
["bbi"] = {"Barombi"},
["bbj"] = {"Ghomálá'"},
["bbk"] = {"Babanki"},
["bbl"] = {"Bats"},
["bbm"] = {"Babango"},
["bbn"] = {"Uneapa"},
["bbo"] = {"Northern Bobo Madaré", "Konabéré"},
["bbp"] = {"West Central Banda"},
["bbq"] = {"Bamali"},
["bbr"] = {"Girawa"},
["bbs"] = {"Bakpinka"},
["bbt"] = {"Mburku"},
["bbu"] = {"Kulung (Nigeria)"},
["bbv"] = {"Karnai"},
["bbw"] = {"Baba"},
["bbx"] = {"Bubia"},
["bby"] = {"Befang"},
["bca"] = {"Central Bai"},
["bcb"] = {"Bainouk-Samik"},
["bcc"] = {"Southern Balochi"},
["bcd"] = {"North Babar"},
["bce"] = {"Bamenyam"},
["bcf"] = {"Bamu"},
["bcg"] = {"Baga Pokur"},
["bch"] = {"Bariai"},
["bci"] = {"Baoulé"},
["bcj"] = {"Bardi"},
["bck"] = {"Bunuba"},
["bcl"] = {"Central Bikol"},
["bcm"] = {"Bannoni"},
["bcn"] = {"Bali (Nigeria)"},
["bco"] = {"Kaluli"},
["bcp"] = {"Bali (Democratic Republic of Congo)"},
["bcq"] = {"Bench"},
["bcr"] = {"Babine"},
["bcs"] = {"Kohumono"},
["bct"] = {"Bendi"},
["bcu"] = {"Awad Bing"},
["bcv"] = {"Shoo-Minda-Nye"},
["bcw"] = {"Bana"},
["bcy"] = {"Bacama"},
["bcz"] = {"Bainouk-Gunyaamolo"},
["bda"] = {"Bayot"},
["bdb"] = {"Basap"},
["bdc"] = {"Emberá-Baudó"},
["bdd"] = {"Bunama"},
["bde"] = {"Bade"},
["bdf"] = {"Biage"},
["bdg"] = {"Bonggi"},
["bdh"] = {"Baka (South Sudan)"},
["bdi"] = {"Burun"},
["bdj"] = {"Bai (South Sudan)", "Bai"},
["bdk"] = {"Budukh"},
["bdl"] = {"Indonesian Bajau"},
["bdm"] = {"Buduma"},
["bdn"] = {"Baldemu"},
["bdo"] = {"Morom"},
["bdp"] = {"Bende"},
["bdq"] = {"Bahnar"},
["bdr"] = {"West Coast Bajau"},
["bds"] = {"Burunge"},
["bdt"] = {"Bokoto"},
["bdu"] = {"Oroko"},
["bdv"] = {"Bodo Parja"},
["bdw"] = {"Baham"},
["bdx"] = {"Budong-Budong"},
["bdy"] = {"Bandjalang"},
["bdz"] = {"Badeshi"},
["bea"] = {"Beaver"},
["beb"] = {"Bebele"},
["bec"] = {"Iceve-Maci"},
["bed"] = {"Bedoanas"},
["bee"] = {"Byangsi"},
["bef"] = {"Benabena"},
["beg"] = {"Belait"},
["beh"] = {"Biali"},
["bei"] = {"Bekati'"},
["bej"] = {"Beja", "Bedawiyet"},
["bek"] = {"Bebeli"},
["bem"] = {"Bemba (Zambia)"},
["beo"] = {"Beami"},
["bep"] = {"Besoa"},
["beq"] = {"Beembe"},
["ber"] = {"Berber languages"},
["bes"] = {"Besme"},
["bet"] = {"Guiberoua Béte"},
["beu"] = {"Blagar"},
["bev"] = {"Daloa Bété"},
["bew"] = {"Betawi"},
["bex"] = {"Jur Modo"},
["bey"] = {"Beli (Papua New Guinea)"},
["bez"] = {"Bena (Tanzania)"},
["bfa"] = {"Bari"},
["bfb"] = {"Pauri Bareli"},
["bfc"] = {"Panyi Bai", "Northern Bai"},
["bfd"] = {"Bafut"},
["bfe"] = {"Betaf", "Tena"},
["bff"] = {"Bofi"},
["bfg"] = {"Busang Kayan"},
["bfh"] = {"Blafe"},
["bfi"] = {"British Sign Language"},
["bfj"] = {"Bafanji"},
["bfk"] = {"Ban Khor Sign Language"},
["bfl"] = {"Banda-Ndélé"},
["bfm"] = {"Mmen"},
["bfn"] = {"Bunak"},
["bfo"] = {"Malba Birifor"},
["bfp"] = {"Beba"},
["bfq"] = {"Badaga"},
["bfr"] = {"Bazigar"},
["bfs"] = {"Southern Bai"},
["bft"] = {"Balti"},
["bfu"] = {"Gahri"},
["bfw"] = {"Bondo"},
["bfx"] = {"Bantayanon"},
["bfy"] = {"Bagheli"},
["bfz"] = {"Mahasu Pahari"},
["bga"] = {"Gwamhi-Wuri"},
["bgb"] = {"Bobongko"},
["bgc"] = {"Haryanvi"},
["bgd"] = {"Rathwi Bareli"},
["bge"] = {"Bauria"},
["bgf"] = {"Bangandu"},
["bgg"] = {"Bugun"},
["bgi"] = {"Giangan"},
["bgj"] = {"Bangolan"},
["bgk"] = {"Bit", "Buxinhua"},
["bgl"] = {"Bo (Laos)"},
["bgn"] = {"Western Balochi"},
["bgo"] = {"Baga Koga"},
["bgp"] = {"Eastern Balochi"},
["bgq"] = {"Bagri"},
["bgr"] = {"Bawm Chin"},
["bgs"] = {"Tagabawa"},
["bgt"] = {"Bughotu"},
["bgu"] = {"Mbongno"},
["bgv"] = {"Warkay-Bipim"},
["bgw"] = {"Bhatri"},
["bgx"] = {"Balkan Gagauz Turkish"},
["bgy"] = {"Benggoi"},
["bgz"] = {"Banggai"},
["bha"] = {"Bharia"},
["bhb"] = {"Bhili"},
["bhc"] = {"Biga"},
["bhd"] = {"Bhadrawahi"},
["bhe"] = {"Bhaya"},
["bhf"] = {"Odiai"},
["bhg"] = {"Binandere"},
["bhh"] = {"Bukharic"},
["bhi"] = {"Bhilali"},
["bhj"] = {"Bahing"},
["bhl"] = {"Bimin"},
["bhm"] = {"Bathari"},
["bhn"] = {"Bohtan Neo-Aramaic"},
["bho"] = {"Bhojpuri"},
["bhp"] = {"Bima"},
["bhq"] = {"Tukang Besi South"},
["bhr"] = {"Bara Malagasy"},
["bhs"] = {"Buwal"},
["bht"] = {"Bhattiyali"},
["bhu"] = {"Bhunjia"},
["bhv"] = {"Bahau"},
["bhw"] = {"Biak"},
["bhx"] = {"Bhalay"},
["bhy"] = {"Bhele"},
["bhz"] = {"Bada (Indonesia)"},
["bia"] = {"Badimaya"},
["bib"] = {"Bissa", "Bisa"},
["bid"] = {"Bidiyo"},
["bie"] = {"Bepour"},
["bif"] = {"Biafada"},
["big"] = {"Biangai"},
["bik"] = {"Bikol"},
["bil"] = {"Bile"},
["bim"] = {"Bimoba"},
["bin"] = {"Bini", "Edo"},
["bio"] = {"Nai"},
["bip"] = {"Bila"},
["biq"] = {"Bipi"},
["bir"] = {"Bisorio"},
["bit"] = {"Berinomo"},
["biu"] = {"Biete"},
["biv"] = {"Southern Birifor"},
["biw"] = {"Kol (Cameroon)"},
["bix"] = {"Bijori"},
["biy"] = {"Birhor"},
["biz"] = {"Baloi"},
["bja"] = {"Budza"},
["bjb"] = {"Banggarla"},
["bjc"] = {"Bariji"},
["bje"] = {"Biao-Jiao Mien"},
["bjf"] = {"Barzani Jewish Neo-Aramaic"},
["bjg"] = {"Bidyogo"},
["bjh"] = {"Bahinemo"},
["bji"] = {"Burji"},
["bjj"] = {"Kanauji"},
["bjk"] = {"Barok"},
["bjl"] = {"Bulu (Papua New Guinea)"},
["bjm"] = {"Bajelani"},
["bjn"] = {"Banjar"},
["bjo"] = {"Mid-Southern Banda"},
["bjp"] = {"Fanamaket"},
["bjr"] = {"Binumarien"},
["bjs"] = {"Bajan"},
["bjt"] = {"Balanta-Ganja"},
["bju"] = {"Busuu"},
["bjv"] = {"Bedjond"},
["bjw"] = {"Bakwé"},
["bjx"] = {"Banao Itneg"},
["bjy"] = {"Bayali"},
["bjz"] = {"Baruga"},
["bka"] = {"Kyak"},
["bkc"] = {"Baka (Cameroon)"},
["bkd"] = {"Binukid", "Talaandig"},
["bkf"] = {"Beeke"},
["bkg"] = {"Buraka"},
["bkh"] = {"Bakoko"},
["bki"] = {"Baki"},
["bkj"] = {"Pande"},
["bkk"] = {"Brokskat"},
["bkl"] = {"Berik"},
["bkm"] = {"Kom (Cameroon)"},
["bkn"] = {"Bukitan"},
["bko"] = {"Kwa'"},
["bkp"] = {"Boko (Democratic Republic of Congo)"},
["bkq"] = {"Bakairí"},
["bkr"] = {"Bakumpai"},
["bks"] = {"Northern Sorsoganon"},
["bkt"] = {"Boloki"},
["bku"] = {"Buhid"},
["bkv"] = {"Bekwarra"},
["bkw"] = {"Bekwel"},
["bkx"] = {"Baikeno"},
["bky"] = {"Bokyi"},
["bkz"] = {"Bungku"},
["bla"] = {"Siksika"},
["blb"] = {"Bilua"},
["blc"] = {"Bella Coola"},
["bld"] = {"Bolango"},
["ble"] = {"Balanta-Kentohe"},
["blf"] = {"Buol"},
["blh"] = {"Kuwaa"},
["bli"] = {"Bolia"},
["blj"] = {"Bolongan"},
["blk"] = {"Pa'o Karen", "Pa'O"},
["bll"] = {"Biloxi"},
["blm"] = {"Beli (South Sudan)"},
["bln"] = {"Southern Catanduanes Bikol"},
["blo"] = {"Anii"},
["blp"] = {"Blablanga"},
["blq"] = {"Baluan-Pam"},
["blr"] = {"Blang"},
["bls"] = {"Balaesang"},
["blt"] = {"Tai Dam"},
["blv"] = {"Kibala", "Bolo"},
["blw"] = {"Balangao"},
["blx"] = {"Mag-Indi Ayta"},
["bly"] = {"Notre"},
["blz"] = {"Balantak"},
["bma"] = {"Lame"},
["bmb"] = {"Bembe"},
["bmc"] = {"Biem"},
["bmd"] = {"Baga Manduri"},
["bme"] = {"Limassa"},
["bmf"] = {"Bom-Kim"},
["bmg"] = {"Bamwe"},
["bmh"] = {"Kein"},
["bmi"] = {"Bagirmi"},
["bmj"] = {"Bote-Majhi"},
["bmk"] = {"Ghayavi"},
["bml"] = {"Bomboli"},
["bmm"] = {"Northern Betsimisaraka Malagasy"},
["bmn"] = {"Bina (Papua New Guinea)"},
["bmo"] = {"Bambalang"},
["bmp"] = {"Bulgebi"},
["bmq"] = {"Bomu"},
["bmr"] = {"Muinane"},
["bms"] = {"Bilma Kanuri"},
["bmt"] = {"Biao Mon"},
["bmu"] = {"Somba-Siawari"},
["bmv"] = {"Bum"},
["bmw"] = {"Bomwali"},
["bmx"] = {"Baimak"},
["bmz"] = {"Baramu"},
["bna"] = {"Bonerate"},
["bnb"] = {"Bookan"},
["bnc"] = {"Bontok"},
["bnd"] = {"Banda (Indonesia)"},
["bne"] = {"Bintauna"},
["bnf"] = {"Masiwang"},
["bng"] = {"Benga"},
["bni"] = {"Bangi"},
["bnj"] = {"Eastern Tawbuid"},
["bnk"] = {"Bierebo"},
["bnl"] = {"Boon"},
["bnm"] = {"Batanga"},
["bnn"] = {"Bunun"},
["bno"] = {"Bantoanon"},
["bnp"] = {"Bola"},
["bnq"] = {"Bantik"},
["bnr"] = {"Butmas-Tur"},
["bns"] = {"Bundeli"},
["bnt"] = {"Bantu languages"},
["bnu"] = {"Bentong"},
["bnv"] = {"Bonerif", "Beneraf", "Edwas"},
["bnw"] = {"Bisis"},
["bnx"] = {"Bangubangu"},
["bny"] = {"Bintulu"},
["bnz"] = {"Beezen"},
["boa"] = {"Bora"},
["bob"] = {"Aweer"},
["boe"] = {"Mundabli"},
["bof"] = {"Bolon"},
["bog"] = {"Bamako Sign Language"},
["boh"] = {"Boma"},
["boi"] = {"Barbareño"},
["boj"] = {"Anjam"},
["bok"] = {"Bonjo"},
["bol"] = {"Bole"},
["bom"] = {"Berom"},
["bon"] = {"Bine"},
["boo"] = {"Tiemacèwè Bozo"},
["bop"] = {"Bonkiman"},
["boq"] = {"Bogaya"},
["bor"] = {"Borôro"},
["bot"] = {"Bongo"},
["bou"] = {"Bondei"},
["bov"] = {"Tuwuli"},
["bow"] = {"Rema"},
["box"] = {"Buamu"},
["boy"] = {"Bodo (Central African Republic)"},
["boz"] = {"Tiéyaxo Bozo"},
["bpa"] = {"Daakaka"},
["bpc"] = {"Mbuk"},
["bpd"] = {"Banda-Banda"},
["bpe"] = {"Bauni"},
["bpg"] = {"Bonggo"},
["bph"] = {"Botlikh"},
["bpi"] = {"Bagupi"},
["bpj"] = {"Binji"},
["bpk"] = {"Orowe", "'Ôrôê"},
["bpl"] = {"Broome Pearling Lugger Pidgin"},
["bpm"] = {"Biyom"},
["bpn"] = {"Dzao Min"},
["bpo"] = {"Anasi"},
["bpp"] = {"Kaure"},
["bpq"] = {"Banda Malay"},
["bpr"] = {"Koronadal Blaan"},
["bps"] = {"Sarangani Blaan"},
["bpt"] = {"Barrow Point"},
["bpu"] = {"Bongu"},
["bpv"] = {"Bian Marind"},
["bpw"] = {"Bo (Papua New Guinea)"},
["bpx"] = {"Palya Bareli"},
["bpy"] = {"Bishnupriya"},
["bpz"] = {"Bilba"},
["bqa"] = {"Tchumbuli"},
["bqb"] = {"Bagusa"},
["bqc"] = {"Boko (Benin)", "Boo"},
["bqd"] = {"Bung"},
["bqf"] = {"Baga Kaloum"},
["bqg"] = {"Bago-Kusuntu"},
["bqh"] = {"Baima"},
["bqi"] = {"Bakhtiari"},
["bqj"] = {"Bandial"},
["bqk"] = {"Banda-Mbrès"},
["bql"] = {"Bilakura"},
["bqm"] = {"Wumboko"},
["bqn"] = {"Bulgarian Sign Language"},
["bqo"] = {"Balo"},
["bqp"] = {"Busa"},
["bqq"] = {"Biritai"},
["bqr"] = {"Burusu"},
["bqs"] = {"Bosngun"},
["bqt"] = {"Bamukumbit"},
["bqu"] = {"Boguru"},
["bqv"] = {"Koro Wachi", "Begbere-Ejar"},
["bqw"] = {"Buru (Nigeria)"},
["bqx"] = {"Baangi"},
["bqy"] = {"Bengkala Sign Language"},
["bqz"] = {"Bakaka"},
["bra"] = {"Braj"},
["brb"] = {"Brao", "Lave"},
["brc"] = {"Berbice Creole Dutch"},
["brd"] = {"Baraamu"},
["brf"] = {"Bira"},
["brg"] = {"Baure"},
["brh"] = {"Brahui"},
["bri"] = {"Mokpwe"},
["brj"] = {"Bieria"},
["brk"] = {"Birked"},
["brl"] = {"Birwa"},
["brm"] = {"Barambu"},
["brn"] = {"Boruca"},
["bro"] = {"Brokkat"},
["brp"] = {"Barapasi"},
["brq"] = {"Breri"},
["brr"] = {"Birao"},
["brs"] = {"Baras"},
["brt"] = {"Bitare"},
["bru"] = {"Eastern Bru"},
["brv"] = {"Western Bru"},
["brw"] = {"Bellari"},
["brx"] = {"Bodo (India)"},
["bry"] = {"Burui"},
["brz"] = {"Bilbil"},
["bsa"] = {"Abinomn"},
["bsb"] = {"Brunei Bisaya"},
["bsc"] = {"Bassari", "Oniyan"},
["bse"] = {"Wushi"},
["bsf"] = {"Bauchi"},
["bsg"] = {"Bashkardi"},
["bsh"] = {"Kati"},
["bsi"] = {"Bassossi"},
["bsj"] = {"Bangwinji"},
["bsk"] = {"Burushaski"},
["bsl"] = {"Basa-Gumna"},
["bsm"] = {"Busami"},
["bsn"] = {"Barasana-Eduria"},
["bso"] = {"Buso"},
["bsp"] = {"Baga Sitemu"},
["bsq"] = {"Bassa"},
["bsr"] = {"Bassa-Kontagora"},
["bss"] = {"Akoose"},
["bst"] = {"Basketo"},
["bsu"] = {"Bahonsuai"},
["bsv"] = {"Baga Sobané"},
["bsw"] = {"Baiso"},
["bsx"] = {"Yangkam"},
["bsy"] = {"Sabah Bisaya"},
["bta"] = {"Bata"},
["btc"] = {"Bati (Cameroon)"},
["btd"] = {"Batak Dairi"},
["bte"] = {"Gamo-Ningi"},
["btf"] = {"Birgit"},
["btg"] = {"Gagnoa Bété"},
["bth"] = {"Biatah Bidayuh"},
["bti"] = {"Burate"},
["btj"] = {"Bacanese Malay"},
["btk"] = {"Batak languages"},
["btm"] = {"Batak Mandailing"},
["btn"] = {"Ratagnon"},
["bto"] = {"Rinconada Bikol"},
["btp"] = {"Budibud"},
["btq"] = {"Batek"},
["btr"] = {"Baetora"},
["bts"] = {"Batak Simalungun"},
["btt"] = {"Bete-Bendi"},
["btu"] = {"Batu"},
["btv"] = {"Bateri"},
["btw"] = {"Butuanon"},
["btx"] = {"Batak Karo"},
["bty"] = {"Bobot"},
["btz"] = {"Batak Alas-Kluet"},
["bua"] = {"Buriat"},
["bub"] = {"Bua"},
["buc"] = {"Bushi"},
["bud"] = {"Ntcham"},
["bue"] = {"Beothuk"},
["buf"] = {"Bushoong"},
["bug"] = {"Buginese"},
["buh"] = {"Younuo Bunu"},
["bui"] = {"Bongili"},
["buj"] = {"Basa-Gurmana"},
["buk"] = {"Bugawac"},
["bum"] = {"Bulu (Cameroon)"},
["bun"] = {"Sherbro"},
["buo"] = {"Terei"},
["bup"] = {"Busoa"},
["buq"] = {"Brem"},
["bus"] = {"Bokobaru"},
["but"] = {"Bungain"},
["buu"] = {"Budu"},
["buv"] = {"Bun"},
["buw"] = {"Bubi"},
["bux"] = {"Boghom"},
["buy"] = {"Bullom So"},
["buz"] = {"Bukwen"},
["bva"] = {"Barein"},
["bvb"] = {"Bube"},
["bvc"] = {"Baelelea"},
["bvd"] = {"Baeggu"},
["bve"] = {"Berau Malay"},
["bvf"] = {"Boor"},
["bvg"] = {"Bonkeng"},
["bvh"] = {"Bure"},
["bvi"] = {"Belanda Viri"},
["bvj"] = {"Baan"},
["bvk"] = {"Bukat"},
["bvl"] = {"Bolivian Sign Language"},
["bvm"] = {"Bamunka"},
["bvn"] = {"Buna"},
["bvo"] = {"Bolgo"},
["bvp"] = {"Bumang"},
["bvq"] = {"Birri"},
["bvr"] = {"Burarra"},
["bvt"] = {"Bati (Indonesia)"},
["bvu"] = {"Bukit Malay"},
["bvv"] = {"Baniva"},
["bvw"] = {"Boga"},
["bvx"] = {"Dibole"},
["bvy"] = {"Baybayanon"},
["bvz"] = {"Bauzi"},
["bwa"] = {"Bwatoo"},
["bwb"] = {"Namosi-Naitasiri-Serua"},
["bwc"] = {"Bwile"},
["bwd"] = {"Bwaidoka"},
["bwe"] = {"Bwe Karen"},
["bwf"] = {"Boselewa"},
["bwg"] = {"Barwe"},
["bwh"] = {"Bishuo"},
["bwi"] = {"Baniwa"},
["bwj"] = {"Láá Láá Bwamu"},
["bwk"] = {"Bauwaki"},
["bwl"] = {"Bwela"},
["bwm"] = {"Biwat"},
["bwn"] = {"Wunai Bunu"},
["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"},
["bwp"] = {"Mandobo Bawah"},
["bwq"] = {"Southern Bobo Madaré"},
["bwr"] = {"Bura-Pabir"},
["bws"] = {"Bomboma"},
["bwt"] = {"Bafaw-Balong"},
["bwu"] = {"Buli (Ghana)"},
["bww"] = {"Bwa"},
["bwx"] = {"Bu-Nao Bunu"},
["bwy"] = {"Cwi Bwamu"},
["bwz"] = {"Bwisi"},
["bxa"] = {"Tairaha"},
["bxb"] = {"Belanda Bor"},
["bxc"] = {"Molengue"},
["bxd"] = {"Pela"},
["bxe"] = {"Birale"},
["bxf"] = {"Bilur", "Minigir"},
["bxg"] = {"Bangala"},
["bxh"] = {"Buhutu"},
["bxi"] = {"Pirlatapa"},
["bxj"] = {"Bayungu"},
["bxk"] = {"Bukusu", "Lubukusu"},
["bxl"] = {"Jalkunan"},
["bxm"] = {"Mongolia Buriat"},
["bxn"] = {"Burduna"},
["bxo"] = {"Barikanchi"},
["bxp"] = {"Bebil"},
["bxq"] = {"Beele"},
["bxr"] = {"Russia Buriat"},
["bxs"] = {"Busam"},
["bxu"] = {"China Buriat"},
["bxv"] = {"Berakou"},
["bxw"] = {"Bankagooma"},
["bxz"] = {"Binahari"},
["bya"] = {"Batak"},
["byb"] = {"Bikya"},
["byc"] = {"Ubaghara"},
["byd"] = {"Benyadu'"},
["bye"] = {"Pouye"},
["byf"] = {"Bete"},
["byg"] = {"Baygo"},
["byh"] = {"Bhujel"},
["byi"] = {"Buyu"},
["byj"] = {"Bina (Nigeria)"},
["byk"] = {"Biao"},
["byl"] = {"Bayono"},
["bym"] = {"Bidjara"},
["byn"] = {"Bilin", "Blin"},
["byo"] = {"Biyo"},
["byp"] = {"Bumaji"},
["byq"] = {"Basay"},
["byr"] = {"Baruya", "Yipma"},
["bys"] = {"Burak"},
["byt"] = {"Berti"},
["byv"] = {"Medumba"},
["byw"] = {"Belhariya"},
["byx"] = {"Qaqet"},
["byz"] = {"Banaro"},
["bza"] = {"Bandi"},
["bzb"] = {"Andio"},
["bzc"] = {"Southern Betsimisaraka Malagasy"},
["bzd"] = {"Bribri"},
["bze"] = {"Jenaama Bozo"},
["bzf"] = {"Boikin"},
["bzg"] = {"Babuza"},
["bzh"] = {"Mapos Buang"},
["bzi"] = {"Bisu"},
["bzj"] = {"Belize Kriol English"},
["bzk"] = {"Nicaragua Creole English"},
["bzl"] = {"Boano (Sulawesi)"},
["bzm"] = {"Bolondo"},
["bzn"] = {"Boano (Maluku)"},
["bzo"] = {"Bozaba"},
["bzp"] = {"Kemberano"},
["bzq"] = {"Buli (Indonesia)"},
["bzr"] = {"Biri"},
["bzs"] = {"Brazilian Sign Language"},
["bzt"] = {"Brithenig"},
["bzu"] = {"Burmeso"},
["bzv"] = {"Naami"},
["bzw"] = {"Basa (Nigeria)"},
["bzx"] = {"Kɛlɛngaxo Bozo"},
["bzy"] = {"Obanliku"},
["bzz"] = {"Evant"},
["caa"] = {"Chortí"},
["cab"] = {"Garifuna"},
["cac"] = {"Chuj"},
["cad"] = {"Caddo"},
["cae"] = {"Lehar", "Laalaa"},
["caf"] = {"Southern Carrier"},
["cag"] = {"Nivaclé"},
["cah"] = {"Cahuarano"},
["cai"] = {"Central American Indian languages"},
["caj"] = {"Chané"},
["cak"] = {"Kaqchikel", "Cakchiquel"},
["cal"] = {"Carolinian"},
["cam"] = {"Cemuhî"},
["can"] = {"Chambri"},
["cao"] = {"Chácobo"},
["cap"] = {"Chipaya"},
["caq"] = {"Car Nicobarese"},
["car"] = {"Galibi Carib"},
["cas"] = {"Tsimané"},
["cau"] = {"Caucasian languages"},
["cav"] = {"Cavineña"},
["caw"] = {"Callawalla"},
["cax"] = {"Chiquitano"},
["cay"] = {"Cayuga"},
["caz"] = {"Canichana"},
["cba"] = {"Chibchan languages"},
["cbb"] = {"Cabiyarí"},
["cbc"] = {"Carapana"},
["cbd"] = {"Carijona"},
["cbg"] = {"Chimila"},
["cbi"] = {"Chachi"},
["cbj"] = {"Ede Cabe"},
["cbk"] = {"Chavacano"},
["cbl"] = {"Bualkhaw Chin"},
["cbn"] = {"Nyahkur"},
["cbo"] = {"Izora"},
["cbq"] = {"Tsucuba", "Cuba"},
["cbr"] = {"Cashibo-Cacataibo"},
["cbs"] = {"Cashinahua"},
["cbt"] = {"Chayahuita"},
["cbu"] = {"Candoshi-Shapra"},
["cbv"] = {"Cacua"},
["cbw"] = {"Kinabalian"},
["cby"] = {"Carabayo"},
["ccc"] = {"Chamicuro"},
["ccd"] = {"Cafundo Creole"},
["cce"] = {"Chopi"},
["ccg"] = {"Samba Daka"},
["cch"] = {"Atsam"},
["ccj"] = {"Kasanga"},
["ccl"] = {"Cutchi-Swahili"},
["ccm"] = {"Malaccan Creole Malay"},
["ccn"] = {"North Caucasian languages"},
["cco"] = {"Comaltepec Chinantec"},
["ccp"] = {"Chakma"},
["ccr"] = {"Cacaopera"},
["ccs"] = {"South Caucasian languages"},
["cda"] = {"Choni"},
["cdc"] = {"Chadic languages"},
["cdd"] = {"Caddoan languages"},
["cde"] = {"Chenchu"},
["cdf"] = {"Chiru"},
["cdh"] = {"Chambeali"},
["cdi"] = {"Chodri"},
["cdj"] = {"Churahi"},
["cdm"] = {"Chepang"},
["cdn"] = {"Chaudangsi"},
["cdo"] = {"Min Dong Chinese"},
["cdr"] = {"Cinda-Regi-Tiyal"},
["cds"] = {"Chadian Sign Language"},
["cdy"] = {"Chadong"},
["cdz"] = {"Koda"},
["cea"] = {"Lower Chehalis"},
["ceb"] = {"Cebuano"},
["ceg"] = {"Chamacoco"},
["cek"] = {"Eastern Khumi Chin"},
["cel"] = {"Celtic languages"},
["cen"] = {"Cen"},
["cet"] = {"Centúúm"},
["cey"] = {"Ekai Chin"},
["cfa"] = {"Dijim-Bwilim"},
["cfd"] = {"Cara"},
["cfg"] = {"Como Karim"},
["cfm"] = {"Falam Chin"},
["cga"] = {"Changriwa"},
["cgc"] = {"Kagayanen"},
["cgg"] = {"Chiga"},
["cgk"] = {"Chocangacakha"},
["chb"] = {"Chibcha"},
["chc"] = {"Catawba"},
["chd"] = {"Highland Oaxaca Chontal"},
["chf"] = {"Tabasco Chontal"},
["chg"] = {"Chagatai"},
["chh"] = {"Chinook"},
["chj"] = {"Ojitlán Chinantec"},
["chk"] = {"Chuukese"},
["chl"] = {"Cahuilla"},
["chm"] = {"Mari (Russia)"},
["chn"] = {"Chinook jargon"},
["cho"] = {"Choctaw"},
["chp"] = {"Chipewyan", "Dene Suline"},
["chq"] = {"Quiotepec Chinantec"},
["chr"] = {"Cherokee"},
["cht"] = {"Cholón"},
["chw"] = {"Chuwabu"},
["chx"] = {"Chantyal"},
["chy"] = {"Cheyenne"},
["chz"] = {"Ozumacín Chinantec"},
["cia"] = {"Cia-Cia"},
["cib"] = {"Ci Gbe"},
["cic"] = {"Chickasaw"},
["cid"] = {"Chimariko"},
["cie"] = {"Cineni"},
["cih"] = {"Chinali"},
["cik"] = {"Chitkuli Kinnauri"},
["cim"] = {"Cimbrian"},
["cin"] = {"Cinta Larga"},
["cip"] = {"Chiapanec"},
["cir"] = {"Tiri", "Haméa", "Méa"},
["ciw"] = {"Chippewa"},
["ciy"] = {"Chaima"},
["cja"] = {"Western Cham"},
["cje"] = {"Chru"},
["cjh"] = {"Upper Chehalis"},
["cji"] = {"Chamalal"},
["cjk"] = {"Chokwe"},
["cjm"] = {"Eastern Cham"},
["cjn"] = {"Chenapian"},
["cjo"] = {"Ashéninka Pajonal"},
["cjp"] = {"Cabécar"},
["cjs"] = {"Shor"},
["cjv"] = {"Chuave"},
["cjy"] = {"Jinyu Chinese"},
["ckb"] = {"Central Kurdish"},
["ckh"] = {"Chak"},
["ckl"] = {"Cibak"},
["ckm"] = {"Chakavian"},
["ckn"] = {"Kaang Chin"},
["cko"] = {"Anufo"},
["ckq"] = {"Kajakse"},
["ckr"] = {"Kairak"},
["cks"] = {"Tayo"},
["ckt"] = {"Chukot"},
["cku"] = {"Koasati"},
["ckv"] = {"Kavalan"},
["ckx"] = {"Caka"},
["cky"] = {"Cakfem-Mushere"},
["ckz"] = {"Cakchiquel-Quiché Mixed Language"},
["cla"] = {"Ron"},
["clc"] = {"Chilcotin"},
["cld"] = {"Chaldean Neo-Aramaic"},
["cle"] = {"Lealao Chinantec"},
["clh"] = {"Chilisso"},
["cli"] = {"Chakali"},
["clj"] = {"Laitu Chin"},
["clk"] = {"Idu-Mishmi"},
["cll"] = {"Chala"},
["clm"] = {"Clallam"},
["clo"] = {"Lowland Oaxaca Chontal"},
["clt"] = {"Lautu Chin"},
["clu"] = {"Caluyanun"},
["clw"] = {"Chulym"},
["cly"] = {"Eastern Highland Chatino"},
["cma"] = {"Maa"},
["cmc"] = {"Chamic languages"},
["cme"] = {"Cerma"},
["cmg"] = {"Classical Mongolian"},
["cmi"] = {"Emberá-Chamí"},
["cml"] = {"Campalagian"},
["cmm"] = {"Michigamea"},
["cmn"] = {"Mandarin Chinese"},
["cmo"] = {"Central Mnong"},
["cmr"] = {"Mro-Khimi Chin"},
["cms"] = {"Messapic"},
["cmt"] = {"Camtho"},
["cna"] = {"Changthang"},
["cnb"] = {"Chinbon Chin"},
["cnc"] = {"Côông"},
["cng"] = {"Northern Qiang"},
["cnh"] = {"Hakha Chin", "Haka Chin"},
["cni"] = {"Asháninka"},
["cnk"] = {"Khumi Chin"},
["cnl"] = {"Lalana Chinantec"},
["cno"] = {"Con"},
["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"},
["cnq"] = {"Chung"},
["cnr"] = {"Montenegrin"},
["cns"] = {"Central Asmat"},
["cnt"] = {"Tepetotutla Chinantec"},
["cnu"] = {"Chenoua"},
["cnw"] = {"Ngawn Chin"},
["cnx"] = {"Middle Cornish"},
["coa"] = {"Cocos Islands Malay"},
["cob"] = {"Chicomuceltec"},
["coc"] = {"Cocopa"},
["cod"] = {"Cocama-Cocamilla"},
["coe"] = {"Koreguaje"},
["cof"] = {"Colorado"},
["cog"] = {"Chong"},
["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"},
["coj"] = {"Cochimi"},
["cok"] = {"Santa Teresa Cora"},
["col"] = {"Columbia-Wenatchi"},
["com"] = {"Comanche"},
["con"] = {"Cofán"},
["coo"] = {"Comox"},
["cop"] = {"Coptic"},
["coq"] = {"Coquille"},
["cot"] = {"Caquinte"},
["cou"] = {"Wamey"},
["cov"] = {"Cao Miao"},
["cow"] = {"Cowlitz"},
["cox"] = {"Nanti"},
["coz"] = {"Chochotec"},
["cpa"] = {"Palantla Chinantec"},
["cpb"] = {"Ucayali-Yurúa Ashéninka"},
["cpc"] = {"Ajyíninka Apurucayali"},
["cpe"] = {"English-based creoles and pidgins"},
["cpf"] = {"French-based creoles and pidgins"},
["cpg"] = {"Cappadocian Greek"},
["cpi"] = {"Chinese Pidgin English"},
["cpn"] = {"Cherepon"},
["cpo"] = {"Kpeego"},
["cpp"] = {"Portuguese-based creoles and pidgins"},
["cps"] = {"Capiznon"},
["cpu"] = {"Pichis Ashéninka"},
["cpx"] = {"Pu-Xian Chinese"},
["cpy"] = {"South Ucayali Ashéninka"},
["cqd"] = {"Chuanqiandian Cluster Miao"},
["cra"] = {"Chara"},
["crb"] = {"Island Carib"},
["crc"] = {"Lonwolwol"},
["crd"] = {"Coeur d'Alene"},
["crf"] = {"Caramanta"},
["crg"] = {"Michif"},
["crh"] = {"Crimean Tatar", "Crimean Turkish"},
["cri"] = {"Sãotomense"},
["crj"] = {"Southern East Cree"},
["crk"] = {"Plains Cree"},
["crl"] = {"Northern East Cree"},
["crm"] = {"Moose Cree"},
["crn"] = {"El Nayar Cora"},
["cro"] = {"Crow"},
["crp"] = {"Creoles and pidgins"},
["crq"] = {"Iyo'wujwa Chorote"},
["crr"] = {"Carolina Algonquian"},
["crs"] = {"Seselwa Creole French"},
["crt"] = {"Iyojwa'ja Chorote"},
["crv"] = {"Chaura"},
["crw"] = {"Chrau"},
["crx"] = {"Carrier"},
["cry"] = {"Cori"},
["crz"] = {"Cruzeño"},
["csa"] = {"Chiltepec Chinantec"},
["csb"] = {"Kashubian"},
["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"},
["csd"] = {"Chiangmai Sign Language"},
["cse"] = {"Czech Sign Language"},
["csf"] = {"Cuba Sign Language"},
["csg"] = {"Chilean Sign Language"},
["csh"] = {"Asho Chin"},
["csi"] = {"Coast Miwok"},
["csj"] = {"Songlai Chin"},
["csk"] = {"Jola-Kasa"},
["csl"] = {"Chinese Sign Language"},
["csm"] = {"Central Sierra Miwok"},
["csn"] = {"Colombian Sign Language"},
["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"},
["csp"] = {"Southern Ping Chinese", "Southern Pinghua"},
["csq"] = {"Croatia Sign Language"},
["csr"] = {"Costa Rican Sign Language"},
["css"] = {"Southern Ohlone"},
["cst"] = {"Northern Ohlone"},
["csu"] = {"Central Sudanic languages"},
["csv"] = {"Sumtu Chin"},
["csw"] = {"Swampy Cree"},
["csx"] = {"Cambodian Sign Language"},
["csy"] = {"Siyin Chin"},
["csz"] = {"Coos"},
["cta"] = {"Tataltepec Chatino"},
["ctc"] = {"Chetco"},
["ctd"] = {"Tedim Chin"},
["cte"] = {"Tepinapa Chinantec"},
["ctg"] = {"Chittagonian"},
["cth"] = {"Thaiphum Chin"},
["ctl"] = {"Tlacoatzintepec Chinantec"},
["ctm"] = {"Chitimacha"},
["ctn"] = {"Chhintange"},
["cto"] = {"Emberá-Catío"},
["ctp"] = {"Western Highland Chatino"},
["cts"] = {"Northern Catanduanes Bikol"},
["ctt"] = {"Wayanad Chetti"},
["ctu"] = {"Chol"},
["cty"] = {"Moundadan Chetty"},
["ctz"] = {"Zacatepec Chatino"},
["cua"] = {"Cua"},
["cub"] = {"Cubeo"},
["cuc"] = {"Usila Chinantec"},
["cuh"] = {"Chuka", "Gichuka"},
["cui"] = {"Cuiba"},
["cuj"] = {"Mashco Piro"},
["cuk"] = {"San Blas Kuna"},
["cul"] = {"Culina", "Kulina"},
["cuo"] = {"Cumanagoto"},
["cup"] = {"Cupeño"},
["cuq"] = {"Cun"},
["cur"] = {"Chhulung"},
["cus"] = {"Cushitic languages"},
["cut"] = {"Teutila Cuicatec"},
["cuu"] = {"Tai Ya"},
["cuv"] = {"Cuvok"},
["cuw"] = {"Chukwa"},
["cux"] = {"Tepeuxila Cuicatec"},
["cuy"] = {"Cuitlatec"},
["cvg"] = {"Chug"},
["cvn"] = {"Valle Nacional Chinantec"},
["cwa"] = {"Kabwa"},
["cwb"] = {"Maindo"},
["cwd"] = {"Woods Cree"},
["cwe"] = {"Kwere"},
["cwg"] = {"Chewong", "Cheq Wong"},
["cwt"] = {"Kuwaataay"},
["cxh"] = {"Cha'ari"},
["cya"] = {"Nopala Chatino"},
["cyb"] = {"Cayubaba"},
["cyo"] = {"Cuyonon"},
["czh"] = {"Huizhou Chinese"},
["czk"] = {"Knaanic"},
["czn"] = {"Zenzontepec Chatino"},
["czo"] = {"Min Zhong Chinese"},
["czt"] = {"Zotung Chin"},
["daa"] = {"Dangaléat"},
["dac"] = {"Dambi"},
["dad"] = {"Marik"},
["dae"] = {"Duupa"},
["dag"] = {"Dagbani"},
["dah"] = {"Gwahatike"},
["dai"] = {"Day"},
["daj"] = {"Dar Fur Daju"},
["dak"] = {"Dakota"},
["dal"] = {"Dahalo"},
["dam"] = {"Damakawa"},
["dao"] = {"Daai Chin"},
["daq"] = {"Dandami Maria"},
["dar"] = {"Dargwa"},
["das"] = {"Daho-Doo"},
["dau"] = {"Dar Sila Daju"},
["dav"] = {"Taita", "Dawida"},
["daw"] = {"Davawenyo"},
["dax"] = {"Dayi"},
["day"] = {"Land Dayak languages"},
["daz"] = {"Dao"},
["dba"] = {"Bangime"},
["dbb"] = {"Deno"},
["dbd"] = {"Dadiya"},
["dbe"] = {"Dabe"},
["dbf"] = {"Edopi"},
["dbg"] = {"Dogul Dom Dogon"},
["dbi"] = {"Doka"},
["dbj"] = {"Ida'an"},
["dbl"] = {"Dyirbal"},
["dbm"] = {"Duguri"},
["dbn"] = {"Duriankere"},
["dbo"] = {"Dulbu"},
["dbp"] = {"Duwai"},
["dbq"] = {"Daba"},
["dbr"] = {"Dabarre"},
["dbt"] = {"Ben Tey Dogon"},
["dbu"] = {"Bondum Dom Dogon"},
["dbv"] = {"Dungu"},
["dbw"] = {"Bankan Tey Dogon"},
["dby"] = {"Dibiyaso"},
["dcc"] = {"Deccan"},
["dcr"] = {"Negerhollands"},
["dda"] = {"Dadi Dadi"},
["ddd"] = {"Dongotono"},
["dde"] = {"Doondo"},
["ddg"] = {"Fataluku"},
["ddi"] = {"West Goodenough"},
["ddj"] = {"Jaru"},
["ddn"] = {"Dendi (Benin)"},
["ddo"] = {"Dido"},
["ddr"] = {"Dhudhuroa"},
["dds"] = {"Donno So Dogon"},
["ddw"] = {"Dawera-Daweloor"},
["dec"] = {"Dagik"},
["ded"] = {"Dedua"},
["dee"] = {"Dewoin"},
["def"] = {"Dezfuli"},
["deg"] = {"Degema"},
["deh"] = {"Dehwari"},
["dei"] = {"Demisa"},
["dek"] = {"Dek"},
["del"] = {"Delaware"},
["dem"] = {"Dem"},
["den"] = {"Slave (Athapascan)"},
["dep"] = {"Pidgin Delaware"},
["deq"] = {"Dendi (Central African Republic)"},
["der"] = {"Deori"},
["des"] = {"Desano"},
["dev"] = {"Domung"},
["dez"] = {"Dengese"},
["dga"] = {"Southern Dagaare"},
["dgb"] = {"Bunoge Dogon"},
["dgc"] = {"Casiguran Dumagat Agta"},
["dgd"] = {"Dagaari Dioula"},
["dge"] = {"Degenan"},
["dgg"] = {"Doga"},
["dgh"] = {"Dghwede"},
["dgi"] = {"Northern Dagara"},
["dgk"] = {"Dagba"},
["dgl"] = {"Andaandi", "Dongolawi"},
["dgn"] = {"Dagoman"},
["dgo"] = {"Dogri (individual language)"},
["dgr"] = {"Dogrib", "Tłı̨chǫ"},
["dgs"] = {"Dogoso"},
["dgt"] = {"Ndra'ngith"},
["dgw"] = {"Daungwurrung"},
["dgx"] = {"Doghoro"},
["dgz"] = {"Daga"},
["dhd"] = {"Dhundari"},
["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"},
["dhi"] = {"Dhimal"},
["dhl"] = {"Dhalandji"},
["dhm"] = {"Zemba"},
["dhn"] = {"Dhanki"},
["dho"] = {"Dhodia"},
["dhr"] = {"Dhargari"},
["dhs"] = {"Dhaiso"},
["dhu"] = {"Dhurga"},
["dhv"] = {"Dehu", "Drehu"},
["dhw"] = {"Dhanwar (Nepal)"},
["dhx"] = {"Dhungaloo"},
["dia"] = {"Dia"},
["dib"] = {"South Central Dinka"},
["dic"] = {"Lakota Dida"},
["did"] = {"Didinga"},
["dif"] = {"Dieri", "Diyari"},
["dig"] = {"Digo", "Chidigo"},
["dih"] = {"Kumiai"},
["dii"] = {"Dimbong"},
["dij"] = {"Dai"},
["dik"] = {"Southwestern Dinka"},
["dil"] = {"Dilling"},
["dim"] = {"Dime"},
["din"] = {"Dinka"},
["dio"] = {"Dibo"},
["dip"] = {"Northeastern Dinka"},
["diq"] = {"Dimli (individual language)"},
["dir"] = {"Dirim"},
["dis"] = {"Dimasa"},
["diu"] = {"Diriku"},
["diw"] = {"Northwestern Dinka"},
["dix"] = {"Dixon Reef"},
["diy"] = {"Diuwe"},
["diz"] = {"Ding"},
["dja"] = {"Djadjawurrung"},
["djb"] = {"Djinba"},
["djc"] = {"Dar Daju Daju"},
["djd"] = {"Djamindjung", "Ngaliwurru"},
["dje"] = {"Zarma"},
["djf"] = {"Djangun"},
["dji"] = {"Djinang"},
["djj"] = {"Djeebbana"},
["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"},
["djm"] = {"Jamsay Dogon"},
["djn"] = {"Jawoyn", "Djauan"},
["djo"] = {"Jangkang"},
["djr"] = {"Djambarrpuyngu"},
["dju"] = {"Kapriman"},
["djw"] = {"Djawi"},
["dka"] = {"Dakpakha"},
["dkg"] = {"Kadung"},
["dkk"] = {"Dakka"},
["dkr"] = {"Kuijau"},
["dks"] = {"Southeastern Dinka"},
["dkx"] = {"Mazagway"},
["dlg"] = {"Dolgan"},
["dlk"] = {"Dahalik"},
["dlm"] = {"Dalmatian"},
["dln"] = {"Darlong"},
["dma"] = {"Duma"},
["dmb"] = {"Mombo Dogon"},
["dmc"] = {"Gavak"},
["dmd"] = {"Madhi Madhi"},
["dme"] = {"Dugwor"},
["dmf"] = {"Medefaidrin"},
["dmg"] = {"Upper Kinabatangan"},
["dmk"] = {"Domaaki"},
["dml"] = {"Dameli"},
["dmm"] = {"Dama"},
["dmn"] = {"Mande languages"},
["dmo"] = {"Kemedzung"},
["dmr"] = {"East Damar"},
["dms"] = {"Dampelas"},
["dmu"] = {"Dubu", "Tebi"},
["dmv"] = {"Dumpas"},
["dmw"] = {"Mudburra"},
["dmx"] = {"Dema"},
["dmy"] = {"Demta", "Sowari"},
["dna"] = {"Upper Grand Valley Dani"},
["dnd"] = {"Daonda"},
["dne"] = {"Ndendeule"},
["dng"] = {"Dungan"},
["dni"] = {"Lower Grand Valley Dani"},
["dnj"] = {"Dan"},
["dnk"] = {"Dengka"},
["dnn"] = {"Dzùùngoo"},
["dno"] = {"Ndrulo", "Northern Lendu"},
["dnr"] = {"Danaru"},
["dnt"] = {"Mid Grand Valley Dani"},
["dnu"] = {"Danau"},
["dnv"] = {"Danu"},
["dnw"] = {"Western Dani"},
["dny"] = {"Dení"},
["doa"] = {"Dom"},
["dob"] = {"Dobu"},
["doc"] = {"Northern Dong"},
["doe"] = {"Doe"},
["dof"] = {"Domu"},
["doh"] = {"Dong"},
["doi"] = {"Dogri (macrolanguage)"},
["dok"] = {"Dondo"},
["dol"] = {"Doso"},
["don"] = {"Toura (Papua New Guinea)"},
["doo"] = {"Dongo"},
["dop"] = {"Lukpa"},
["doq"] = {"Dominican Sign Language"},
["dor"] = {"Dori'o"},
["dos"] = {"Dogosé"},
["dot"] = {"Dass"},
["dov"] = {"Dombe"},
["dow"] = {"Doyayo"},
["dox"] = {"Bussa"},
["doy"] = {"Dompo"},
["doz"] = {"Dorze"},
["dpp"] = {"Papar"},
["dra"] = {"Dravidian languages"},
["drb"] = {"Dair"},
["drc"] = {"Minderico"},
["drd"] = {"Darmiya"},
["dre"] = {"Dolpo"},
["drg"] = {"Rungus"},
["dri"] = {"C'Lela"},
["drl"] = {"Paakantyi"},
["drn"] = {"West Damar"},
["dro"] = {"Daro-Matu Melanau"},
["drq"] = {"Dura"},
["drs"] = {"Gedeo"},
["drt"] = {"Drents"},
["dru"] = {"Rukai"},
["dry"] = {"Darai"},
["dsb"] = {"Lower Sorbian"},
["dse"] = {"Dutch Sign Language"},
["dsh"] = {"Daasanach"},
["dsi"] = {"Disa"},
["dsk"] = {"Dokshi"},
["dsl"] = {"Danish Sign Language"},
["dsn"] = {"Dusner"},
["dso"] = {"Desiya"},
["dsq"] = {"Tadaksahak"},
["dsz"] = {"Mardin Sign Language"},
["dta"] = {"Daur"},
["dtb"] = {"Labuk-Kinabatangan Kadazan"},
["dtd"] = {"Ditidaht"},
["dth"] = {"Adithinngithigh"},
["dti"] = {"Ana Tinga Dogon"},
["dtk"] = {"Tene Kan Dogon"},
["dtm"] = {"Tomo Kan Dogon"},
["dtn"] = {"Daatsʼíin"},
["dto"] = {"Tommo So Dogon"},
["dtp"] = {"Kadazan Dusun", "Central Dusun"},
["dtr"] = {"Lotud"},
["dts"] = {"Toro So Dogon"},
["dtt"] = {"Toro Tegu Dogon"},
["dtu"] = {"Tebul Ure Dogon"},
["dty"] = {"Dotyali"},
["dua"] = {"Duala"},
["dub"] = {"Dubli"},
["duc"] = {"Duna"},
["due"] = {"Umiray Dumaget Agta"},
["duf"] = {"Dumbea", "Drubea"},
["dug"] = {"Duruma", "Chiduruma"},
["duh"] = {"Dungra Bhil"},
["dui"] = {"Dumun"},
["duk"] = {"Uyajitaya"},
["dul"] = {"Alabat Island Agta"},
["dum"] = {"Middle Dutch (ca. 1050-1350)"},
["dun"] = {"Dusun Deyah"},
["duo"] = {"Dupaninan Agta"},
["dup"] = {"Duano"},
["duq"] = {"Dusun Malang"},
["dur"] = {"Dii"},
["dus"] = {"Dumi"},
["duu"] = {"Drung"},
["duv"] = {"Duvle"},
["duw"] = {"Dusun Witu"},
["dux"] = {"Duungooma"},
["duy"] = {"Dicamay Agta"},
["duz"] = {"Duli-Gey"},
["dva"] = {"Duau"},
["dwa"] = {"Diri"},
["dwk"] = {"Dawik Kui"},
["dwr"] = {"Dawro"},
["dws"] = {"Dutton World Speedwords"},
["dwu"] = {"Dhuwal"},
["dww"] = {"Dawawa"},
["dwy"] = {"Dhuwaya"},
["dwz"] = {"Dewas Rai"},
["dya"] = {"Dyan"},
["dyb"] = {"Dyaberdyaber"},
["dyd"] = {"Dyugun"},
["dyg"] = {"Villa Viciosa Agta"},
["dyi"] = {"Djimini Senoufo"},
["dym"] = {"Yanda Dom Dogon"},
["dyn"] = {"Dyangadi", "Dhanggatti"},
["dyo"] = {"Jola-Fonyi"},
["dyr"] = {"Dyarim"},
["dyu"] = {"Dyula"},
["dyy"] = {"Djabugay", "Dyaabugay"},
["dza"] = {"Tunzu"},
["dzd"] = {"Daza"},
["dze"] = {"Djiwarli"},
["dzg"] = {"Dazaga"},
["dzl"] = {"Dzalakha"},
["dzn"] = {"Dzando"},
["eaa"] = {"Karenggapa"},
["ebc"] = {"Beginci"},
["ebg"] = {"Ebughu"},
["ebk"] = {"Eastern Bontok"},
["ebo"] = {"Teke-Ebo"},
["ebr"] = {"Ebrié"},
["ebu"] = {"Embu", "Kiembu"},
["ecr"] = {"Eteocretan"},
["ecs"] = {"Ecuadorian Sign Language"},
["ecy"] = {"Eteocypriot"},
["eee"] = {"E"},
["efa"] = {"Efai"},
["efe"] = {"Efe"},
["efi"] = {"Efik"},
["ega"] = {"Ega"},
["egl"] = {"Emilian"},
["egm"] = {"Benamanga"},
["ego"] = {"Eggon"},
["egx"] = {"Egyptian languages"},
["egy"] = {"Egyptian (Ancient)"},
["ehs"] = {"Miyakubo Sign Language"},
["ehu"] = {"Ehueun"},
["eip"] = {"Eipomek"},
["eit"] = {"Eitiep"},
["eiv"] = {"Askopan"},
["eja"] = {"Ejamat"},
["eka"] = {"Ekajuk"},
["eke"] = {"Ekit"},
["ekg"] = {"Ekari"},
["eki"] = {"Eki"},
["ekk"] = {"Standard Estonian"},
["ekl"] = {"Kol (Bangladesh)", "Kol"},
["ekm"] = {"Elip"},
["eko"] = {"Koti"},
["ekp"] = {"Ekpeye"},
["ekr"] = {"Yace"},
["eky"] = {"Eastern Kayah"},
["ele"] = {"Elepi"},
["elh"] = {"El Hugeirat"},
["eli"] = {"Nding"},
["elk"] = {"Elkei"},
["elm"] = {"Eleme"},
["elo"] = {"El Molo"},
["elu"] = {"Elu"},
["elx"] = {"Elamite"},
["ema"] = {"Emai-Iuleha-Ora"},
["emb"] = {"Embaloh"},
["eme"] = {"Emerillon"},
["emg"] = {"Eastern Meohang"},
["emi"] = {"Mussau-Emira"},
["emk"] = {"Eastern Maninkakan"},
["emm"] = {"Mamulique"},
["emn"] = {"Eman"},
["emp"] = {"Northern Emberá"},
["emq"] = {"Eastern Minyag"},
["ems"] = {"Pacific Gulf Yupik"},
["emu"] = {"Eastern Muria"},
["emw"] = {"Emplawas"},
["emx"] = {"Erromintxela"},
["emy"] = {"Epigraphic Mayan"},
["emz"] = {"Mbessa"},
["ena"] = {"Apali"},
["enb"] = {"Markweeta"},
["enc"] = {"En"},
["end"] = {"Ende"},
["enf"] = {"Forest Enets"},
["enh"] = {"Tundra Enets"},
["enl"] = {"Enlhet"},
["enm"] = {"Middle English (1100-1500)"},
["enn"] = {"Engenni"},
["eno"] = {"Enggano"},
["enq"] = {"Enga"},
["enr"] = {"Emumu", "Emem"},
["enu"] = {"Enu"},
["env"] = {"Enwan (Edo State)"},
["enw"] = {"Enwan (Akwa Ibom State)"},
["enx"] = {"Enxet"},
["eot"] = {"Beti (Côte d'Ivoire)"},
["epi"] = {"Epie"},
["era"] = {"Eravallan"},
["erg"] = {"Sie"},
["erh"] = {"Eruwa"},
["eri"] = {"Ogea"},
["erk"] = {"South Efate"},
["ero"] = {"Horpa"},
["err"] = {"Erre"},
["ers"] = {"Ersu"},
["ert"] = {"Eritai"},
["erw"] = {"Erokwanas"},
["ese"] = {"Ese Ejja"},
["esg"] = {"Aheri Gondi"},
["esh"] = {"Eshtehardi"},
["esi"] = {"North Alaskan Inupiatun"},
["esk"] = {"Northwest Alaska Inupiatun"},
["esl"] = {"Egypt Sign Language"},
["esm"] = {"Esuma"},
["esn"] = {"Salvadoran Sign Language"},
["eso"] = {"Estonian Sign Language"},
["esq"] = {"Esselen"},
["ess"] = {"Central Siberian Yupik"},
["esu"] = {"Central Yupik"},
["esx"] = {"Eskimo-Aleut languages"},
["esy"] = {"Eskayan"},
["etb"] = {"Etebi"},
["etc"] = {"Etchemin"},
["eth"] = {"Ethiopian Sign Language"},
["etn"] = {"Eton (Vanuatu)"},
["eto"] = {"Eton (Cameroon)"},
["etr"] = {"Edolo"},
["ets"] = {"Yekhee"},
["ett"] = {"Etruscan"},
["etu"] = {"Ejagham"},
["etx"] = {"Eten"},
["etz"] = {"Semimi"},
["eud"] = {"Eudeve"},
["euq"] = {"Basque (family)"},
["eve"] = {"Even"},
["evh"] = {"Uvbie"},
["evn"] = {"Evenki"},
["ewo"] = {"Ewondo"},
["ext"] = {"Extremaduran"},
["eya"] = {"Eyak"},
["eyo"] = {"Keiyo"},
["eza"] = {"Ezaa"},
["eze"] = {"Uzekwe"},
["faa"] = {"Fasu"},
["fab"] = {"Fa d'Ambu"},
["fad"] = {"Wagi"},
["faf"] = {"Fagani"},
["fag"] = {"Finongan"},
["fah"] = {"Baissa Fali"},
["fai"] = {"Faiwol"},
["faj"] = {"Faita"},
["fak"] = {"Fang (Cameroon)"},
["fal"] = {"South Fali"},
["fam"] = {"Fam"},
["fan"] = {"Fang (Equatorial Guinea)"},
["fap"] = {"Paloor"},
["far"] = {"Fataleka"},
["fat"] = {"Fanti"},
["fau"] = {"Fayu"},
["fax"] = {"Fala"},
["fay"] = {"Southwestern Fars"},
["faz"] = {"Northwestern Fars"},
["fbl"] = {"West Albay Bikol"},
["fcs"] = {"Quebec Sign Language"},
["fer"] = {"Feroge"},
["ffi"] = {"Foia Foia"},
["ffm"] = {"Maasina Fulfulde"},
["fgr"] = {"Fongoro"},
["fia"] = {"Nobiin"},
["fie"] = {"Fyer"},
["fif"] = {"Faifi"},
["fil"] = {"Filipino", "Pilipino"},
["fip"] = {"Fipa"},
["fir"] = {"Firan"},
["fit"] = {"Tornedalen Finnish", "Meänkieli"},
["fiu"] = {"Finno-Ugrian languages"},
["fiw"] = {"Fiwaga"},
["fkk"] = {"Kirya-Konzəl"},
["fkv"] = {"Kven Finnish"},
["fla"] = {"Kalispel-Pend d'Oreille"},
["flh"] = {"Foau"},
["fli"] = {"Fali"},
["fll"] = {"North Fali"},
["fln"] = {"Flinders Island"},
["flr"] = {"Fuliiru"},
["fly"] = {"Flaaitaal", "Tsotsitaal"},
["fmp"] = {"Fe'fe'"},
["fmu"] = {"Far Western Muria"},
["fnb"] = {"Fanbak"},
["fng"] = {"Fanagalo"},
["fni"] = {"Fania"},
["fod"] = {"Foodo"},
["foi"] = {"Foi"},
["fom"] = {"Foma"},
["fon"] = {"Fon"},
["for"] = {"Fore"},
["fos"] = {"Siraya"},
["fox"] = {"Formosan languages"},
["fpe"] = {"Fernando Po Creole English"},
["fqs"] = {"Fas"},
["frc"] = {"Cajun French"},
["frd"] = {"Fordata"},
["frk"] = {"Frankish"},
["frm"] = {"Middle French (ca. 1400-1600)"},
["fro"] = {"Old French (842-ca. 1400)"},
["frp"] = {"Arpitan", "Francoprovençal"},
["frq"] = {"Forak"},
["frr"] = {"Northern Frisian"},
["frs"] = {"Eastern Frisian"},
["frt"] = {"Fortsenal"},
["fse"] = {"Finnish Sign Language"},
["fsl"] = {"French Sign Language"},
["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"},
["fub"] = {"Adamawa Fulfulde"},
["fuc"] = {"Pulaar"},
["fud"] = {"East Futuna"},
["fue"] = {"Borgu Fulfulde"},
["fuf"] = {"Pular"},
["fuh"] = {"Western Niger Fulfulde"},
["fui"] = {"Bagirmi Fulfulde"},
["fuj"] = {"Ko"},
["fum"] = {"Fum"},
["fun"] = {"Fulniô"},
["fuq"] = {"Central-Eastern Niger Fulfulde"},
["fur"] = {"Friulian"},
["fut"] = {"Futuna-Aniwa"},
["fuu"] = {"Furu"},
["fuv"] = {"Nigerian Fulfulde"},
["fuy"] = {"Fuyug"},
["fvr"] = {"Fur"},
["fwa"] = {"Fwâi"},
["fwe"] = {"Fwe"},
["gaa"] = {"Ga"},
["gab"] = {"Gabri"},
["gac"] = {"Mixed Great Andamanese"},
["gad"] = {"Gaddang"},
["gae"] = {"Guarequena"},
["gaf"] = {"Gende"},
["gag"] = {"Gagauz"},
["gah"] = {"Alekano"},
["gai"] = {"Borei"},
["gaj"] = {"Gadsup"},
["gak"] = {"Gamkonora"},
["gal"] = {"Galolen"},
["gam"] = {"Kandawo"},
["gan"] = {"Gan Chinese"},
["gao"] = {"Gants"},
["gap"] = {"Gal"},
["gaq"] = {"Gata'"},
["gar"] = {"Galeya"},
["gas"] = {"Adiwasi Garasia"},
["gat"] = {"Kenati"},
["gau"] = {"Mudhili Gadaba"},
["gaw"] = {"Nobonob"},
["gax"] = {"Borana-Arsi-Guji Oromo"},
["gay"] = {"Gayo"},
["gaz"] = {"West Central Oromo"},
["gba"] = {"Gbaya (Central African Republic)"},
["gbb"] = {"Kaytetye"},
["gbd"] = {"Karajarri"},
["gbe"] = {"Niksek"},
["gbf"] = {"Gaikundi"},
["gbg"] = {"Gbanziri"},
["gbh"] = {"Defi Gbe"},
["gbi"] = {"Galela"},
["gbj"] = {"Bodo Gadaba"},
["gbk"] = {"Gaddi"},
["gbl"] = {"Gamit"},
["gbm"] = {"Garhwali"},
["gbn"] = {"Mo'da"},
["gbo"] = {"Northern Grebo"},
["gbp"] = {"Gbaya-Bossangoa"},
["gbq"] = {"Gbaya-Bozoum"},
["gbr"] = {"Gbagyi"},
["gbs"] = {"Gbesi Gbe"},
["gbu"] = {"Gagadu"},
["gbv"] = {"Gbanu"},
["gbw"] = {"Gabi-Gabi"},
["gbx"] = {"Eastern Xwla Gbe"},
["gby"] = {"Gbari"},
["gbz"] = {"Zoroastrian Dari"},
["gcc"] = {"Mali"},
["gcd"] = {"Ganggalida"},
["gce"] = {"Galice"},
["gcf"] = {"Guadeloupean Creole French"},
["gcl"] = {"Grenadian Creole English"},
["gcn"] = {"Gaina"},
["gcr"] = {"Guianese Creole French"},
["gct"] = {"Colonia Tovar German"},
["gda"] = {"Gade Lohar"},
["gdb"] = {"Pottangi Ollar Gadaba"},
["gdc"] = {"Gugu Badhun"},
["gdd"] = {"Gedaged"},
["gde"] = {"Gude"},
["gdf"] = {"Guduf-Gava"},
["gdg"] = {"Ga'dang"},
["gdh"] = {"Gadjerawang", "Gajirrabeng"},
["gdi"] = {"Gundi"},
["gdj"] = {"Gurdjar"},
["gdk"] = {"Gadang"},
["gdl"] = {"Dirasha"},
["gdm"] = {"Laal"},
["gdn"] = {"Umanakaina"},
["gdo"] = {"Ghodoberi"},
["gdq"] = {"Mehri"},
["gdr"] = {"Wipi"},
["gds"] = {"Ghandruk Sign Language"},
["gdt"] = {"Kungardutyi"},
["gdu"] = {"Gudu"},
["gdx"] = {"Godwari"},
["gea"] = {"Geruma"},
["geb"] = {"Kire"},
["gec"] = {"Gboloo Grebo"},
["ged"] = {"Gade"},
["gef"] = {"Gerai"},
["geg"] = {"Gengle"},
["geh"] = {"Hutterite German", "Hutterisch"},
["gei"] = {"Gebe"},
["gej"] = {"Gen"},
["gek"] = {"Ywom"},
["gel"] = {"ut-Ma'in"},
["gem"] = {"Germanic languages"},
["geq"] = {"Geme"},
["ges"] = {"Geser-Gorom"},
["gev"] = {"Eviya"},
["gew"] = {"Gera"},
["gex"] = {"Garre"},
["gey"] = {"Enya"},
["gez"] = {"Geez"},
["gfk"] = {"Patpatar"},
["gft"] = {"Gafat"},
["gga"] = {"Gao"},
["ggb"] = {"Gbii"},
["ggd"] = {"Gugadj"},
["gge"] = {"Gurr-goni"},
["ggg"] = {"Gurgula"},
["ggk"] = {"Kungarakany"},
["ggl"] = {"Ganglau"},
["ggt"] = {"Gitua"},
["ggu"] = {"Gagu", "Gban"},
["ggw"] = {"Gogodala"},
["gha"] = {"Ghadamès"},
["ghc"] = {"Hiberno-Scottish Gaelic"},
["ghe"] = {"Southern Ghale"},
["ghh"] = {"Northern Ghale"},
["ghk"] = {"Geko Karen"},
["ghl"] = {"Ghulfan"},
["ghn"] = {"Ghanongga"},
["gho"] = {"Ghomara"},
["ghr"] = {"Ghera"},
["ghs"] = {"Guhu-Samane"},
["ght"] = {"Kuke", "Kutang Ghale"},
["gia"] = {"Kija"},
["gib"] = {"Gibanawa"},
["gic"] = {"Gail"},
["gid"] = {"Gidar"},
["gie"] = {"Gaɓogbo", "Guébie"},
["gig"] = {"Goaria"},
["gih"] = {"Githabul"},
["gii"] = {"Girirra"},
["gil"] = {"Gilbertese"},
["gim"] = {"Gimi (Eastern Highlands)"},
["gin"] = {"Hinukh"},
["gip"] = {"Gimi (West New Britain)"},
["giq"] = {"Green Gelao"},
["gir"] = {"Red Gelao"},
["gis"] = {"North Giziga"},
["git"] = {"Gitxsan"},
["giu"] = {"Mulao"},
["giw"] = {"White Gelao"},
["gix"] = {"Gilima"},
["giy"] = {"Giyug"},
["giz"] = {"South Giziga"},
["gjk"] = {"Kachi Koli"},
["gjm"] = {"Gunditjmara"},
["gjn"] = {"Gonja"},
["gjr"] = {"Gurindji Kriol"},
["gju"] = {"Gujari"},
["gka"] = {"Guya"},
["gkd"] = {"Magɨ (Madang Province)"},
["gke"] = {"Ndai"},
["gkn"] = {"Gokana"},
["gko"] = {"Kok-Nar"},
["gkp"] = {"Guinea Kpelle"},
["gku"] = {"ǂUngkue"},
["glb"] = {"Belning"},
["glc"] = {"Bon Gula"},
["gld"] = {"Nanai"},
["glh"] = {"Northwest Pashai", "Northwest Pashayi"},
["glj"] = {"Gula Iro"},
["glk"] = {"Gilaki"},
["gll"] = {"Garlali"},
["glo"] = {"Galambu"},
["glr"] = {"Glaro-Twabo"},
["glu"] = {"Gula (Chad)"},
["glw"] = {"Glavda"},
["gly"] = {"Gule"},
["gma"] = {"Gambera"},
["gmb"] = {"Gula'alaa"},
["gmd"] = {"Mághdì"},
["gme"] = {"East Germanic languages"},
["gmg"] = {"Magɨyi"},
["gmh"] = {"Middle High German (ca. 1050-1500)"},
["gml"] = {"Middle Low German"},
["gmm"] = {"Gbaya-Mbodomo"},
["gmn"] = {"Gimnime"},
["gmq"] = {"North Germanic languages"},
["gmr"] = {"Mirning", "Mirniny"},
["gmu"] = {"Gumalu"},
["gmv"] = {"Gamo"},
["gmw"] = {"West Germanic languages"},
["gmx"] = {"Magoma"},
["gmy"] = {"Mycenaean Greek"},
["gmz"] = {"Mgbolizhia"},
["gna"] = {"Kaansa"},
["gnb"] = {"Gangte"},
["gnc"] = {"Guanche"},
["gnd"] = {"Zulgo-Gemzek"},
["gne"] = {"Ganang"},
["gng"] = {"Ngangam"},
["gnh"] = {"Lere"},
["gni"] = {"Gooniyandi"},
["gnj"] = {"Ngen"},
["gnk"] = {"ǁGana"},
["gnl"] = {"Gangulu"},
["gnm"] = {"Ginuman"},
["gnn"] = {"Gumatj"},
["gno"] = {"Northern Gondi"},
["gnq"] = {"Gana"},
["gnr"] = {"Gureng Gureng"},
["gnt"] = {"Guntai"},
["gnu"] = {"Gnau"},
["gnw"] = {"Western Bolivian Guaraní"},
["gnz"] = {"Ganzi"},
["goa"] = {"Guro"},
["gob"] = {"Playero"},
["goc"] = {"Gorakor"},
["god"] = {"Godié"},
["goe"] = {"Gongduk"},
["gof"] = {"Gofa"},
["gog"] = {"Gogo"},
["goh"] = {"Old High German (ca. 750-1050)"},
["goi"] = {"Gobasi"},
["goj"] = {"Gowlan"},
["gok"] = {"Gowli"},
["gol"] = {"Gola"},
["gom"] = {"Goan Konkani"},
["gon"] = {"Gondi"},
["goo"] = {"Gone Dau"},
["gop"] = {"Yeretuar"},
["goq"] = {"Gorap"},
["gor"] = {"Gorontalo"},
["gos"] = {"Gronings"},
["got"] = {"Gothic"},
["gou"] = {"Gavar"},
["gov"] = {"Goo"},
["gow"] = {"Gorowa"},
["gox"] = {"Gobu"},
["goy"] = {"Goundo"},
["goz"] = {"Gozarkhani"},
["gpa"] = {"Gupa-Abawa"},
["gpe"] = {"Ghanaian Pidgin English"},
["gpn"] = {"Taiap"},
["gqa"] = {"Ga'anda"},
["gqi"] = {"Guiqiong"},
["gqn"] = {"Guana (Brazil)"},
["gqr"] = {"Gor"},
["gqu"] = {"Qau"},
["gra"] = {"Rajput Garasia"},
["grb"] = {"Grebo"},
["grc"] = {"Ancient Greek (to 1453)"},
["grd"] = {"Guruntum-Mbaaru"},
["grg"] = {"Madi"},
["grh"] = {"Gbiri-Niragu"},
["gri"] = {"Ghari"},
["grj"] = {"Southern Grebo"},
["grk"] = {"Greek languages"},
["grm"] = {"Kota Marudu Talantang"},
["gro"] = {"Groma"},
["grq"] = {"Gorovu"},
["grr"] = {"Taznatit"},
["grs"] = {"Gresi"},
["grt"] = {"Garo"},
["gru"] = {"Kistane"},
["grv"] = {"Central Grebo"},
["grw"] = {"Gweda"},
["grx"] = {"Guriaso"},
["gry"] = {"Barclayville Grebo"},
["grz"] = {"Guramalum"},
["gse"] = {"Ghanaian Sign Language"},
["gsg"] = {"German Sign Language"},
["gsl"] = {"Gusilay"},
["gsm"] = {"Guatemalan Sign Language"},
["gsn"] = {"Nema", "Gusan"},
["gso"] = {"Southwest Gbaya"},
["gsp"] = {"Wasembo"},
["gss"] = {"Greek Sign Language"},
["gsw"] = {"Swiss German", "Alemannic", "Alsatian"},
["gta"] = {"Guató"},
["gtu"] = {"Aghu-Tharnggala"},
["gua"] = {"Shiki"},
["gub"] = {"Guajajára"},
["guc"] = {"Wayuu"},
["gud"] = {"Yocoboué Dida"},
["gue"] = {"Gurindji"},
["guf"] = {"Gupapuyngu"},
["gug"] = {"Paraguayan Guaraní"},
["guh"] = {"Guahibo"},
["gui"] = {"Eastern Bolivian Guaraní"},
["guk"] = {"Gumuz"},
["gul"] = {"Sea Island Creole English"},
["gum"] = {"Guambiano"},
["gun"] = {"Mbyá Guaraní"},
["guo"] = {"Guayabero"},
["gup"] = {"Gunwinggu"},
["guq"] = {"Aché"},
["gur"] = {"Farefare"},
["gus"] = {"Guinean Sign Language"},
["gut"] = {"Maléku Jaíka"},
["guu"] = {"Yanomamö"},
["guw"] = {"Gun"},
["gux"] = {"Gourmanchéma"},
["guz"] = {"Gusii", "Ekegusii"},
["gva"] = {"Guana (Paraguay)"},
["gvc"] = {"Guanano"},
["gve"] = {"Duwet"},
["gvf"] = {"Golin"},
["gvj"] = {"Guajá"},
["gvl"] = {"Gulay"},
["gvm"] = {"Gurmana"},
["gvn"] = {"Kuku-Yalanji"},
["gvo"] = {"Gavião Do Jiparaná"},
["gvp"] = {"Pará Gavião"},
["gvr"] = {"Gurung"},
["gvs"] = {"Gumawana"},
["gvy"] = {"Guyani"},
["gwa"] = {"Mbato"},
["gwb"] = {"Gwa"},
["gwc"] = {"Gawri", "Kalami"},
["gwd"] = {"Gawwada"},
["gwe"] = {"Gweno"},
["gwf"] = {"Gowro"},
["gwg"] = {"Moo"},
["gwi"] = {"Gwichʼin"},
["gwj"] = {"ǀGwi"},
["gwm"] = {"Awngthim"},
["gwn"] = {"Gwandara"},
["gwr"] = {"Gwere"},
["gwt"] = {"Gawar-Bati"},
["gwu"] = {"Guwamu"},
["gww"] = {"Kwini"},
["gwx"] = {"Gua"},
["gxx"] = {"Wè Southern"},
["gya"] = {"Northwest Gbaya"},
["gyb"] = {"Garus"},
["gyd"] = {"Kayardild"},
["gye"] = {"Gyem"},
["gyf"] = {"Gungabula"},
["gyg"] = {"Gbayi"},
["gyi"] = {"Gyele"},
["gyl"] = {"Gayil"},
["gym"] = {"Ngäbere"},
["gyn"] = {"Guyanese Creole English"},
["gyo"] = {"Gyalsumdo"},
["gyr"] = {"Guarayu"},
["gyy"] = {"Gunya"},
["gyz"] = {"Geji", "Gyaazi"},
["gza"] = {"Ganza"},
["gzi"] = {"Gazi"},
["gzn"] = {"Gane"},
["haa"] = {"Han"},
["hab"] = {"Hanoi Sign Language"},
["hac"] = {"Gurani"},
["had"] = {"Hatam"},
["hae"] = {"Eastern Oromo"},
["haf"] = {"Haiphong Sign Language"},
["hag"] = {"Hanga"},
["hah"] = {"Hahon"},
["hai"] = {"Haida"},
["haj"] = {"Hajong"},
["hak"] = {"Hakka Chinese"},
["hal"] = {"Halang"},
["ham"] = {"Hewa"},
["han"] = {"Hangaza"},
["hao"] = {"Hakö"},
["hap"] = {"Hupla"},
["haq"] = {"Ha"},
["har"] = {"Harari"},
["has"] = {"Haisla"},
["hav"] = {"Havu"},
["haw"] = {"Hawaiian"},
["hax"] = {"Southern Haida"},
["hay"] = {"Haya"},
["haz"] = {"Hazaragi"},
["hba"] = {"Hamba"},
["hbb"] = {"Huba"},
["hbn"] = {"Heiban"},
["hbo"] = {"Ancient Hebrew"},
["hbu"] = {"Habu"},
["hca"] = {"Andaman Creole Hindi"},
["hch"] = {"Huichol"},
["hdn"] = {"Northern Haida"},
["hds"] = {"Honduras Sign Language"},
["hdy"] = {"Hadiyya"},
["hea"] = {"Northern Qiandong Miao"},
["hed"] = {"Herdé"},
["heg"] = {"Helong"},
["heh"] = {"Hehe"},
["hei"] = {"Heiltsuk"},
["hem"] = {"Hemba"},
["hgm"] = {"Haiǁom"},
["hgw"] = {"Haigwai"},
["hhi"] = {"Hoia Hoia"},
["hhr"] = {"Kerak"},
["hhy"] = {"Hoyahoya"},
["hia"] = {"Lamang"},
["hib"] = {"Hibito"},
["hid"] = {"Hidatsa"},
["hif"] = {"Fiji Hindi"},
["hig"] = {"Kamwe"},
["hih"] = {"Pamosu"},
["hii"] = {"Hinduri"},
["hij"] = {"Hijuk"},
["hik"] = {"Seit-Kaitetu"},
["hil"] = {"Hiligaynon"},
["him"] = {"Himachali languages", "Western Pahari languages"},
["hio"] = {"Tsoa"},
["hir"] = {"Himarimã"},
["hit"] = {"Hittite"},
["hiw"] = {"Hiw"},
["hix"] = {"Hixkaryána"},
["hji"] = {"Haji"},
["hka"] = {"Kahe"},
["hke"] = {"Hunde"},
["hkh"] = {"Khah", "Poguli"},
["hkk"] = {"Hunjara-Kaina Ke"},
["hkn"] = {"Mel-Khaonh"},
["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"},
["hla"] = {"Halia"},
["hlb"] = {"Halbi"},
["hld"] = {"Halang Doan"},
["hle"] = {"Hlersu"},
["hlt"] = {"Matu Chin"},
["hlu"] = {"Hieroglyphic Luwian"},
["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"},
["hmb"] = {"Humburi Senni Songhay"},
["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"},
["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"},
["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"},
["hmf"] = {"Hmong Don"},
["hmg"] = {"Southwestern Guiyang Hmong"},
["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"},
["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"},
["hmj"] = {"Ge", "Gejia"},
["hmk"] = {"Maek"},
["hml"] = {"Luopohe Hmong", "Luopohe Miao"},
["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"},
["hmn"] = {"Hmong", "Mong"},
["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"},
["hmq"] = {"Eastern Qiandong Miao"},
["hmr"] = {"Hmar"},
["hms"] = {"Southern Qiandong Miao"},
["hmt"] = {"Hamtai"},
["hmu"] = {"Hamap"},
["hmv"] = {"Hmong Dô"},
["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"},
["hmx"] = {"Hmong-Mien languages"},
["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"},
["hmz"] = {"Hmong Shua", "Sinicized Miao"},
["hna"] = {"Mina (Cameroon)"},
["hnd"] = {"Southern Hindko"},
["hne"] = {"Chhattisgarhi"},
["hng"] = {"Hungu"},
["hnh"] = {"ǁAni"},
["hni"] = {"Hani"},
["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"},
["hnn"] = {"Hanunoo"},
["hno"] = {"Northern Hindko"},
["hns"] = {"Caribbean Hindustani"},
["hnu"] = {"Hung"},
["hoa"] = {"Hoava"},
["hob"] = {"Mari (Madang Province)"},
["hoc"] = {"Ho"},
["hod"] = {"Holma"},
["hoe"] = {"Horom"},
["hoh"] = {"Hobyót"},
["hoi"] = {"Holikachuk"},
["hoj"] = {"Hadothi", "Haroti"},
["hok"] = {"Hokan languages"},
["hol"] = {"Holu"},
["hom"] = {"Homa"},
["hoo"] = {"Holoholo"},
["hop"] = {"Hopi"},
["hor"] = {"Horo"},
["hos"] = {"Ho Chi Minh City Sign Language"},
["hot"] = {"Hote", "Malê"},
["hov"] = {"Hovongan"},
["how"] = {"Honi"},
["hoy"] = {"Holiya"},
["hoz"] = {"Hozo"},
["hpo"] = {"Hpon"},
["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"},
["hra"] = {"Hrangkhol"},
["hrc"] = {"Niwer Mil"},
["hre"] = {"Hre"},
["hrk"] = {"Haruku"},
["hrm"] = {"Horned Miao"},
["hro"] = {"Haroi"},
["hrp"] = {"Nhirrpi"},
["hrt"] = {"Hértevin"},
["hru"] = {"Hruso"},
["hrw"] = {"Warwar Feni"},
["hrx"] = {"Hunsrik"},
["hrz"] = {"Harzani"},
["hsb"] = {"Upper Sorbian"},
["hsh"] = {"Hungarian Sign Language"},
["hsl"] = {"Hausa Sign Language"},
["hsn"] = {"Xiang Chinese"},
["hss"] = {"Harsusi"},
["hti"] = {"Hoti"},
["hto"] = {"Minica Huitoto"},
["hts"] = {"Hadza"},
["htu"] = {"Hitu"},
["htx"] = {"Middle Hittite"},
["hub"] = {"Huambisa"},
["huc"] = {"ǂHua", "ǂʼAmkhoe"},
["hud"] = {"Huaulu"},
["hue"] = {"San Francisco Del Mar Huave"},
["huf"] = {"Humene"},
["hug"] = {"Huachipaeri"},
["huh"] = {"Huilliche"},
["hui"] = {"Huli"},
["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"},
["huk"] = {"Hulung"},
["hul"] = {"Hula"},
["hum"] = {"Hungana"},
["huo"] = {"Hu"},
["hup"] = {"Hupa"},
["huq"] = {"Tsat"},
["hur"] = {"Halkomelem"},
["hus"] = {"Huastec"},
["hut"] = {"Humla"},
["huu"] = {"Murui Huitoto"},
["huv"] = {"San Mateo Del Mar Huave"},
["huw"] = {"Hukumina"},
["hux"] = {"Nüpode Huitoto"},
["huy"] = {"Hulaulá"},
["huz"] = {"Hunzib"},
["hvc"] = {"Haitian Vodoun Culture Language"},
["hve"] = {"San Dionisio Del Mar Huave"},
["hvk"] = {"Haveke"},
["hvn"] = {"Sabu"},
["hvv"] = {"Santa María Del Mar Huave"},
["hwa"] = {"Wané"},
["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"},
["hwo"] = {"Hwana"},
["hya"] = {"Hya"},
["hyw"] = {"Western Armenian"},
["hyx"] = {"Armenian (family)"},
["iai"] = {"Iaai"},
["ian"] = {"Iatmul"},
["iar"] = {"Purari"},
["iba"] = {"Iban"},
["ibb"] = {"Ibibio"},
["ibd"] = {"Iwaidja"},
["ibe"] = {"Akpes"},
["ibg"] = {"Ibanag"},
["ibh"] = {"Bih"},
["ibl"] = {"Ibaloi"},
["ibm"] = {"Agoi"},
["ibn"] = {"Ibino"},
["ibr"] = {"Ibuoro"},
["ibu"] = {"Ibu"},
["iby"] = {"Ibani"},
["ica"] = {"Ede Ica"},
["ich"] = {"Etkywan"},
["icl"] = {"Icelandic Sign Language"},
["icr"] = {"Islander Creole English"},
["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"},
["idb"] = {"Indo-Portuguese"},
["idc"] = {"Idon", "Ajiya"},
["idd"] = {"Ede Idaca"},
["ide"] = {"Idere"},
["idi"] = {"Idi"},
["idr"] = {"Indri"},
["ids"] = {"Idesa"},
["idt"] = {"Idaté"},
["idu"] = {"Idoma"},
["ifa"] = {"Amganad Ifugao"},
["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"},
["ife"] = {"Ifè"},
["iff"] = {"Ifo"},
["ifk"] = {"Tuwali Ifugao"},
["ifm"] = {"Teke-Fuumu"},
["ifu"] = {"Mayoyao Ifugao"},
["ify"] = {"Keley-I Kallahan"},
["igb"] = {"Ebira"},
["ige"] = {"Igede"},
["igg"] = {"Igana"},
["igl"] = {"Igala"},
["igm"] = {"Kanggape"},
["ign"] = {"Ignaciano"},
["igo"] = {"Isebe"},
["igs"] = {"Interglossa"},
["igw"] = {"Igwe"},
["ihb"] = {"Iha Based Pidgin"},
["ihi"] = {"Ihievbe"},
["ihp"] = {"Iha"},
["ihw"] = {"Bidhawal"},
["iin"] = {"Thiin"},
["iir"] = {"Indo-Iranian languages"},
["ijc"] = {"Izon"},
["ije"] = {"Biseni"},
["ijj"] = {"Ede Ije"},
["ijn"] = {"Kalabari"},
["ijo"] = {"Ijo languages"},
["ijs"] = {"Southeast Ijo"},
["ike"] = {"Eastern Canadian Inuktitut"},
["ikh"] = {"Ikhin-Arokho"},
["iki"] = {"Iko"},
["ikk"] = {"Ika"},
["ikl"] = {"Ikulu"},
["iko"] = {"Olulumo-Ikom"},
["ikp"] = {"Ikpeshi"},
["ikr"] = {"Ikaranggal"},
["iks"] = {"Inuit Sign Language"},
["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"},
["ikv"] = {"Iku-Gora-Ankwa"},
["ikw"] = {"Ikwere"},
["ikx"] = {"Ik"},
["ikz"] = {"Ikizu"},
["ila"] = {"Ile Ape"},
["ilb"] = {"Ila"},
["ilg"] = {"Garig-Ilgar"},
["ili"] = {"Ili Turki"},
["ilk"] = {"Ilongot"},
["ilm"] = {"Iranun (Malaysia)"},
["ilo"] = {"Iloko"},
["ilp"] = {"Iranun (Philippines)"},
["ils"] = {"International Sign"},
["ilu"] = {"Ili'uun"},
["ilv"] = {"Ilue"},
["ima"] = {"Mala Malasar"},
["imi"] = {"Anamgura"},
["iml"] = {"Miluk"},
["imn"] = {"Imonda"},
["imo"] = {"Imbongu"},
["imr"] = {"Imroing"},
["ims"] = {"Marsian"},
["imt"] = {"Imotong"},
["imy"] = {"Milyan"},
["inb"] = {"Inga"},
["inc"] = {"Indic languages"},
["ine"] = {"Indo-European languages"},
["ing"] = {"Degexit'an"},
["inh"] = {"Ingush"},
["inj"] = {"Jungle Inga"},
["inl"] = {"Indonesian Sign Language"},
["inm"] = {"Minaean"},
["inn"] = {"Isinai"},
["ino"] = {"Inoke-Yate"},
["inp"] = {"Iñapari"},
["ins"] = {"Indian Sign Language"},
["int"] = {"Intha"},
["inz"] = {"Ineseño"},
["ior"] = {"Inor"},
["iou"] = {"Tuma-Irumu"},
["iow"] = {"Iowa-Oto"},
["ipi"] = {"Ipili"},
["ipo"] = {"Ipiko"},
["iqu"] = {"Iquito"},
["iqw"] = {"Ikwo"},
["ira"] = {"Iranian languages"},
["ire"] = {"Iresim"},
["irh"] = {"Irarutu"},
["iri"] = {"Rigwe", "Irigwe"},
["irk"] = {"Iraqw"},
["irn"] = {"Irántxe"},
["iro"] = {"Iroquoian languages"},
["irr"] = {"Ir"},
["iru"] = {"Irula"},
["irx"] = {"Kamberau"},
["iry"] = {"Iraya"},
["isa"] = {"Isabi"},
["isc"] = {"Isconahua"},
["isd"] = {"Isnag"},
["ise"] = {"Italian Sign Language"},
["isg"] = {"Irish Sign Language"},
["ish"] = {"Esan"},
["isi"] = {"Nkem-Nkum"},
["isk"] = {"Ishkashimi"},
["ism"] = {"Masimasi"},
["isn"] = {"Isanzu"},
["iso"] = {"Isoko"},
["isr"] = {"Israeli Sign Language"},
["ist"] = {"Istriot"},
["isu"] = {"Isu (Menchum Division)"},
["itb"] = {"Binongan Itneg"},
["itc"] = {"Italic languages"},
["itd"] = {"Southern Tidung"},
["ite"] = {"Itene"},
["iti"] = {"Inlaod Itneg"},
["itk"] = {"Judeo-Italian"},
["itl"] = {"Itelmen"},
["itm"] = {"Itu Mbon Uzo"},
["ito"] = {"Itonama"},
["itr"] = {"Iteri"},
["its"] = {"Isekiri"},
["itt"] = {"Maeng Itneg"},
["itv"] = {"Itawit"},
["itw"] = {"Ito"},
["itx"] = {"Itik"},
["ity"] = {"Moyadan Itneg"},
["itz"] = {"Itzá"},
["ium"] = {"Iu Mien"},
["ivb"] = {"Ibatan"},
["ivv"] = {"Ivatan"},
["iwk"] = {"I-Wak"},
["iwm"] = {"Iwam"},
["iwo"] = {"Iwur"},
["iws"] = {"Sepik Iwam"},
["ixc"] = {"Ixcatec"},
["ixl"] = {"Ixil"},
["iya"] = {"Iyayu"},
["iyo"] = {"Mesaka"},
["iyx"] = {"Yaka (Congo)"},
["izh"] = {"Ingrian"},
["izm"] = {"Kizamani"},
["izr"] = {"Izere"},
["izz"] = {"Izii"},
["jaa"] = {"Jamamadí"},
["jab"] = {"Hyam"},
["jac"] = {"Popti'", "Jakalteko"},
["jad"] = {"Jahanka"},
["jae"] = {"Yabem"},
["jaf"] = {"Jara"},
["jah"] = {"Jah Hut"},
["jaj"] = {"Zazao"},
["jak"] = {"Jakun"},
["jal"] = {"Yalahatan"},
["jam"] = {"Jamaican Creole English"},
["jan"] = {"Jandai"},
["jao"] = {"Yanyuwa"},
["jaq"] = {"Yaqay"},
["jas"] = {"New Caledonian Javanese"},
["jat"] = {"Jakati"},
["jau"] = {"Yaur"},
["jax"] = {"Jambi Malay"},
["jay"] = {"Yan-nhangu", "Nhangu"},
["jaz"] = {"Jawe"},
["jbe"] = {"Judeo-Berber"},
["jbi"] = {"Badjiri"},
["jbj"] = {"Arandai"},
["jbk"] = {"Barikewa"},
["jbm"] = {"Bijim"},
["jbn"] = {"Nafusi"},
["jbo"] = {"Lojban"},
["jbr"] = {"Jofotek-Bromnya"},
["jbt"] = {"Jabutí"},
["jbu"] = {"Jukun Takum"},
["jbw"] = {"Yawijibaya"},
["jcs"] = {"Jamaican Country Sign Language"},
["jct"] = {"Krymchak"},
["jda"] = {"Jad"},
["jdg"] = {"Jadgali"},
["jdt"] = {"Judeo-Tat"},
["jeb"] = {"Jebero"},
["jee"] = {"Jerung"},
["jeh"] = {"Jeh"},
["jei"] = {"Yei"},
["jek"] = {"Jeri Kuo"},
["jel"] = {"Yelmek"},
["jen"] = {"Dza"},
["jer"] = {"Jere"},
["jet"] = {"Manem"},
["jeu"] = {"Jonkor Bourmataguil"},
["jgb"] = {"Ngbee"},
["jge"] = {"Judeo-Georgian"},
["jgk"] = {"Gwak"},
["jgo"] = {"Ngomba"},
["jhi"] = {"Jehai"},
["jhs"] = {"Jhankot Sign Language"},
["jia"] = {"Jina"},
["jib"] = {"Jibu"},
["jic"] = {"Tol"},
["jid"] = {"Bu (Kaduna State)"},
["jie"] = {"Jilbe"},
["jig"] = {"Jingulu", "Djingili"},
["jih"] = {"sTodsde", "Shangzhai"},
["jii"] = {"Jiiddu"},
["jil"] = {"Jilim"},
["jim"] = {"Jimi (Cameroon)"},
["jio"] = {"Jiamao"},
["jiq"] = {"Guanyinqiao", "Lavrung"},
["jit"] = {"Jita"},
["jiu"] = {"Youle Jinuo"},
["jiv"] = {"Shuar"},
["jiy"] = {"Buyuan Jinuo"},
["jje"] = {"Jejueo"},
["jjr"] = {"Bankal"},
["jka"] = {"Kaera"},
["jkm"] = {"Mobwa Karen"},
["jko"] = {"Kubo"},
["jkp"] = {"Paku Karen"},
["jkr"] = {"Koro (India)"},
["jks"] = {"Amami Koniya Sign Language"},
["jku"] = {"Labir"},
["jle"] = {"Ngile"},
["jls"] = {"Jamaican Sign Language"},
["jma"] = {"Dima"},
["jmb"] = {"Zumbun"},
["jmc"] = {"Machame"},
["jmd"] = {"Yamdena"},
["jmi"] = {"Jimi (Nigeria)"},
["jml"] = {"Jumli"},
["jmn"] = {"Makuri Naga"},
["jmr"] = {"Kamara"},
["jms"] = {"Mashi (Nigeria)"},
["jmw"] = {"Mouwase"},
["jmx"] = {"Western Juxtlahuaca Mixtec"},
["jna"] = {"Jangshung"},
["jnd"] = {"Jandavra"},
["jng"] = {"Yangman"},
["jni"] = {"Janji"},
["jnj"] = {"Yemsa"},
["jnl"] = {"Rawat"},
["jns"] = {"Jaunsari"},
["job"] = {"Joba"},
["jod"] = {"Wojenaka"},
["jog"] = {"Jogi"},
["jor"] = {"Jorá"},
["jos"] = {"Jordanian Sign Language"},
["jow"] = {"Jowulu"},
["jpa"] = {"Jewish Palestinian Aramaic"},
["jpr"] = {"Judeo-Persian"},
["jpx"] = {"Japanese (family)"},
["jqr"] = {"Jaqaru"},
["jra"] = {"Jarai"},
["jrb"] = {"Judeo-Arabic"},
["jrr"] = {"Jiru"},
["jrt"] = {"Jakattoe"},
["jru"] = {"Japrería"},
["jsl"] = {"Japanese Sign Language"},
["jua"] = {"Júma"},
["jub"] = {"Wannu"},
["juc"] = {"Jurchen"},
["jud"] = {"Worodougou"},
["juh"] = {"Hõne"},
["jui"] = {"Ngadjuri"},
["juk"] = {"Wapan"},
["jul"] = {"Jirel"},
["jum"] = {"Jumjum"},
["jun"] = {"Juang"},
["juo"] = {"Jiba"},
["jup"] = {"Hupdë"},
["jur"] = {"Jurúna"},
["jus"] = {"Jumla Sign Language"},
["jut"] = {"Jutish"},
["juu"] = {"Ju"},
["juw"] = {"Wãpha"},
["juy"] = {"Juray"},
["jvd"] = {"Javindo"},
["jvn"] = {"Caribbean Javanese"},
["jwi"] = {"Jwira-Pepesa"},
["jya"] = {"Jiarong"},
["jye"] = {"Judeo-Yemeni Arabic"},
["jyy"] = {"Jaya"},
["kaa"] = {"Kara-Kalpak", "Karakalpak"},
["kab"] = {"Kabyle"},
["kac"] = {"Kachin", "Jingpho"},
["kad"] = {"Adara"},
["kae"] = {"Ketangalan"},
["kaf"] = {"Katso"},
["kag"] = {"Kajaman"},
["kah"] = {"Kara (Central African Republic)"},
["kai"] = {"Karekare"},
["kaj"] = {"Jju"},
["kak"] = {"Kalanguya", "Kayapa Kallahan"},
["kam"] = {"Kamba (Kenya)"},
["kao"] = {"Xaasongaxango"},
["kap"] = {"Bezhta"},
["kaq"] = {"Capanahua"},
["kar"] = {"Karen languages"},
["kav"] = {"Katukína"},
["kaw"] = {"Kawi"},
["kax"] = {"Kao"},
["kay"] = {"Kamayurá"},
["kba"] = {"Kalarko"},
["kbb"] = {"Kaxuiâna"},
["kbc"] = {"Kadiwéu"},
["kbd"] = {"Kabardian"},
["kbe"] = {"Kanju"},
["kbg"] = {"Khamba"},
["kbh"] = {"Camsá"},
["kbi"] = {"Kaptiau"},
["kbj"] = {"Kari"},
["kbk"] = {"Grass Koiari"},
["kbl"] = {"Kanembu"},
["kbm"] = {"Iwal"},
["kbn"] = {"Kare (Central African Republic)"},
["kbo"] = {"Keliko"},
["kbp"] = {"Kabiyè"},
["kbq"] = {"Kamano"},
["kbr"] = {"Kafa"},
["kbs"] = {"Kande"},
["kbt"] = {"Abadi"},
["kbu"] = {"Kabutra"},
["kbv"] = {"Dera (Indonesia)"},
["kbw"] = {"Kaiep"},
["kbx"] = {"Ap Ma"},
["kby"] = {"Manga Kanuri"},
["kbz"] = {"Duhwa"},
["kca"] = {"Khanty"},
["kcb"] = {"Kawacha"},
["kcc"] = {"Lubila"},
["kcd"] = {"Ngkâlmpw Kanum"},
["kce"] = {"Kaivi"},
["kcf"] = {"Ukaan"},
["kcg"] = {"Tyap"},
["kch"] = {"Vono"},
["kci"] = {"Kamantan"},
["kcj"] = {"Kobiana"},
["kck"] = {"Kalanga"},
["kcl"] = {"Kela (Papua New Guinea)", "Kala"},
["kcm"] = {"Gula (Central African Republic)"},
["kcn"] = {"Nubi"},
["kco"] = {"Kinalakna"},
["kcp"] = {"Kanga"},
["kcq"] = {"Kamo"},
["kcr"] = {"Katla"},
["kcs"] = {"Koenoem"},
["kct"] = {"Kaian"},
["kcu"] = {"Kami (Tanzania)"},
["kcv"] = {"Kete"},
["kcw"] = {"Kabwari"},
["kcx"] = {"Kachama-Ganjule"},
["kcy"] = {"Korandje"},
["kcz"] = {"Konongo"},
["kda"] = {"Worimi"},
["kdc"] = {"Kutu"},
["kdd"] = {"Yankunytjatjara"},
["kde"] = {"Makonde"},
["kdf"] = {"Mamusi"},
["kdg"] = {"Seba"},
["kdh"] = {"Tem"},
["kdi"] = {"Kumam"},
["kdj"] = {"Karamojong"},
["kdk"] = {"Numèè", "Kwényi"},
["kdl"] = {"Tsikimba"},
["kdm"] = {"Kagoma"},
["kdn"] = {"Kunda"},
["kdo"] = {"Kordofanian languages"},
["kdp"] = {"Kaningdon-Nindem"},
["kdq"] = {"Koch"},
["kdr"] = {"Karaim"},
["kdt"] = {"Kuy"},
["kdu"] = {"Kadaru"},
["kdw"] = {"Koneraw"},
["kdx"] = {"Kam"},
["kdy"] = {"Keder", "Keijar"},
["kdz"] = {"Kwaja"},
["kea"] = {"Kabuverdianu"},
["keb"] = {"Kélé"},
["kec"] = {"Keiga"},
["ked"] = {"Kerewe"},
["kee"] = {"Eastern Keres"},
["kef"] = {"Kpessi"},
["keg"] = {"Tese"},
["keh"] = {"Keak"},
["kei"] = {"Kei"},
["kej"] = {"Kadar"},
["kek"] = {"Kekchí"},
["kel"] = {"Kela (Democratic Republic of Congo)"},
["kem"] = {"Kemak"},
["ken"] = {"Kenyang"},
["keo"] = {"Kakwa"},
["kep"] = {"Kaikadi"},
["keq"] = {"Kamar"},
["ker"] = {"Kera"},
["kes"] = {"Kugbo"},
["ket"] = {"Ket"},
["keu"] = {"Akebu"},
["kev"] = {"Kanikkaran"},
["kew"] = {"West Kewa"},
["kex"] = {"Kukna"},
["key"] = {"Kupia"},
["kez"] = {"Kukele"},
["kfa"] = {"Kodava"},
["kfb"] = {"Northwestern Kolami"},
["kfc"] = {"Konda-Dora"},
["kfd"] = {"Korra Koraga"},
["kfe"] = {"Kota (India)"},
["kff"] = {"Koya"},
["kfg"] = {"Kudiya"},
["kfh"] = {"Kurichiya"},
["kfi"] = {"Kannada Kurumba"},
["kfj"] = {"Kemiehua"},
["kfk"] = {"Kinnauri"},
["kfl"] = {"Kung"},
["kfm"] = {"Khunsari"},
["kfn"] = {"Kuk"},
["kfo"] = {"Koro (Côte d'Ivoire)"},
["kfp"] = {"Korwa"},
["kfq"] = {"Korku"},
["kfr"] = {"Kachhi", "Kutchi"},
["kfs"] = {"Bilaspuri"},
["kft"] = {"Kanjari"},
["kfu"] = {"Katkari"},
["kfv"] = {"Kurmukar"},
["kfw"] = {"Kharam Naga"},
["kfx"] = {"Kullu Pahari"},
["kfy"] = {"Kumaoni"},
["kfz"] = {"Koromfé"},
["kga"] = {"Koyaga"},
["kgb"] = {"Kawe"},
["kge"] = {"Komering"},
["kgf"] = {"Kube"},
["kgg"] = {"Kusunda"},
["kgi"] = {"Selangor Sign Language"},
["kgj"] = {"Gamale Kham"},
["kgk"] = {"Kaiwá"},
["kgl"] = {"Kunggari"},
["kgn"] = {"Karingani"},
["kgo"] = {"Krongo"},
["kgp"] = {"Kaingang"},
["kgq"] = {"Kamoro"},
["kgr"] = {"Abun"},
["kgs"] = {"Kumbainggar"},
["kgt"] = {"Somyev"},
["kgu"] = {"Kobol"},
["kgv"] = {"Karas"},
["kgw"] = {"Karon Dori"},
["kgx"] = {"Kamaru"},
["kgy"] = {"Kyerung"},
["kha"] = {"Khasi"},
["khb"] = {"Lü"},
["khc"] = {"Tukang Besi North"},
["khd"] = {"Bädi Kanum"},
["khe"] = {"Korowai"},
["khf"] = {"Khuen"},
["khg"] = {"Khams Tibetan"},
["khh"] = {"Kehu"},
["khi"] = {"Khoisan languages"},
["khj"] = {"Kuturmi"},
["khk"] = {"Halh Mongolian"},
["khl"] = {"Lusi"},
["khn"] = {"Khandesi"},
["kho"] = {"Khotanese", "Sakan"},
["khp"] = {"Kapori", "Kapauri"},
["khq"] = {"Koyra Chiini Songhay"},
["khr"] = {"Kharia"},
["khs"] = {"Kasua"},
["kht"] = {"Khamti"},
["khu"] = {"Nkhumbi"},
["khv"] = {"Khvarshi"},
["khw"] = {"Khowar"},
["khx"] = {"Kanu"},
["khy"] = {"Kele (Democratic Republic of Congo)"},
["khz"] = {"Keapara"},
["kia"] = {"Kim"},
["kib"] = {"Koalib"},
["kic"] = {"Kickapoo"},
["kid"] = {"Koshin"},
["kie"] = {"Kibet"},
["kif"] = {"Eastern Parbate Kham"},
["kig"] = {"Kimaama", "Kimaghima"},
["kih"] = {"Kilmeri"},
["kii"] = {"Kitsai"},
["kij"] = {"Kilivila"},
["kil"] = {"Kariya"},
["kim"] = {"Karagas"},
["kio"] = {"Kiowa"},
["kip"] = {"Sheshi Kham"},
["kiq"] = {"Kosadle", "Kosare"},
["kis"] = {"Kis"},
["kit"] = {"Agob"},
["kiu"] = {"Kirmanjki (individual language)"},
["kiv"] = {"Kimbu"},
["kiw"] = {"Northeast Kiwai"},
["kix"] = {"Khiamniungan Naga"},
["kiy"] = {"Kirikiri"},
["kiz"] = {"Kisi"},
["kja"] = {"Mlap"},
["kjb"] = {"Q'anjob'al", "Kanjobal"},
["kjc"] = {"Coastal Konjo"},
["kjd"] = {"Southern Kiwai"},
["kje"] = {"Kisar"},
["kjg"] = {"Khmu"},
["kjh"] = {"Khakas"},
["kji"] = {"Zabana"},
["kjj"] = {"Khinalugh"},
["kjk"] = {"Highland Konjo"},
["kjl"] = {"Western Parbate Kham"},
["kjm"] = {"Kháng"},
["kjn"] = {"Kunjen"},
["kjo"] = {"Harijan Kinnauri"},
["kjp"] = {"Pwo Eastern Karen"},
["kjq"] = {"Western Keres"},
["kjr"] = {"Kurudu"},
["kjs"] = {"East Kewa"},
["kjt"] = {"Phrae Pwo Karen"},
["kju"] = {"Kashaya"},
["kjv"] = {"Kaikavian Literary Language"},
["kjx"] = {"Ramopa"},
["kjy"] = {"Erave"},
["kjz"] = {"Bumthangkha"},
["kka"] = {"Kakanda"},
["kkb"] = {"Kwerisa"},
["kkc"] = {"Odoodee"},
["kkd"] = {"Kinuku"},
["kke"] = {"Kakabe"},
["kkf"] = {"Kalaktang Monpa"},
["kkg"] = {"Mabaka Valley Kalinga"},
["kkh"] = {"Khün"},
["kki"] = {"Kagulu"},
["kkj"] = {"Kako"},
["kkk"] = {"Kokota"},
["kkl"] = {"Kosarek Yale"},
["kkm"] = {"Kiong"},
["kkn"] = {"Kon Keu"},
["kko"] = {"Karko"},
["kkp"] = {"Gugubera", "Koko-Bera"},
["kkq"] = {"Kaeku"},
["kkr"] = {"Kir-Balar"},
["kks"] = {"Giiwo"},
["kkt"] = {"Koi"},
["kku"] = {"Tumi"},
["kkv"] = {"Kangean"},
["kkw"] = {"Teke-Kukuya"},
["kkx"] = {"Kohin"},
["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"},
["kkz"] = {"Kaska"},
["kla"] = {"Klamath-Modoc"},
["klb"] = {"Kiliwa"},
["klc"] = {"Kolbila"},
["kld"] = {"Gamilaraay"},
["kle"] = {"Kulung (Nepal)"},
["klf"] = {"Kendeje"},
["klg"] = {"Tagakaulo"},
["klh"] = {"Weliki"},
["kli"] = {"Kalumpang"},
["klj"] = {"Khalaj"},
["klk"] = {"Kono (Nigeria)"},
["kll"] = {"Kagan Kalagan"},
["klm"] = {"Migum"},
["kln"] = {"Kalenjin"},
["klo"] = {"Kapya"},
["klp"] = {"Kamasa"},
["klq"] = {"Rumu"},
["klr"] = {"Khaling"},
["kls"] = {"Kalasha"},
["klt"] = {"Nukna"},
["klu"] = {"Klao"},
["klv"] = {"Maskelynes"},
["klw"] = {"Tado", "Lindu"},
["klx"] = {"Koluwawa"},
["kly"] = {"Kalao"},
["klz"] = {"Kabola"},
["kma"] = {"Konni"},
["kmb"] = {"Kimbundu"},
["kmc"] = {"Southern Dong"},
["kmd"] = {"Majukayang Kalinga"},
["kme"] = {"Bakole"},
["kmf"] = {"Kare (Papua New Guinea)"},
["kmg"] = {"Kâte"},
["kmh"] = {"Kalam"},
["kmi"] = {"Kami (Nigeria)"},
["kmj"] = {"Kumarbhag Paharia"},
["kmk"] = {"Limos Kalinga"},
["kml"] = {"Tanudan Kalinga"},
["kmm"] = {"Kom (India)"},
["kmn"] = {"Awtuw"},
["kmo"] = {"Kwoma"},
["kmp"] = {"Gimme"},
["kmq"] = {"Kwama"},
["kmr"] = {"Northern Kurdish"},
["kms"] = {"Kamasau"},
["kmt"] = {"Kemtuik"},
["kmu"] = {"Kanite"},
["kmv"] = {"Karipúna Creole French"},
["kmw"] = {"Komo (Democratic Republic of Congo)"},
["kmx"] = {"Waboda"},
["kmy"] = {"Koma"},
["kmz"] = {"Khorasani Turkish"},
["kna"] = {"Dera (Nigeria)"},
["knb"] = {"Lubuagan Kalinga"},
["knc"] = {"Central Kanuri"},
["knd"] = {"Konda"},
["kne"] = {"Kankanaey"},
["knf"] = {"Mankanya"},
["kng"] = {"Koongo"},
["kni"] = {"Kanufi"},
["knj"] = {"Western Kanjobal"},
["knk"] = {"Kuranko"},
["knl"] = {"Keninjal"},
["knm"] = {"Kanamarí"},
["knn"] = {"Konkani (individual language)"},
["kno"] = {"Kono (Sierra Leone)"},
["knp"] = {"Kwanja"},
["knq"] = {"Kintaq"},
["knr"] = {"Kaningra"},
["kns"] = {"Kensiu"},
["knt"] = {"Panoan Katukína"},
["knu"] = {"Kono (Guinea)"},
["knv"] = {"Tabo"},
["knw"] = {"Kung-Ekoka"},
["knx"] = {"Kendayan", "Salako"},
["kny"] = {"Kanyok"},
["knz"] = {"Kalamsé"},
["koa"] = {"Konomala"},
["koc"] = {"Kpati"},
["kod"] = {"Kodi"},
["koe"] = {"Kacipo-Bale Suri"},
["kof"] = {"Kubi"},
["kog"] = {"Cogui", "Kogi"},
["koh"] = {"Koyo"},
["koi"] = {"Komi-Permyak"},
["kok"] = {"Konkani (macrolanguage)"},
["kol"] = {"Kol (Papua New Guinea)"},
["koo"] = {"Konzo"},
["kop"] = {"Waube"},
["koq"] = {"Kota (Gabon)"},
["kos"] = {"Kosraean"},
["kot"] = {"Lagwan"},
["kou"] = {"Koke"},
["kov"] = {"Kudu-Camo"},
["kow"] = {"Kugama"},
["koy"] = {"Koyukon"},
["koz"] = {"Korak"},
["kpa"] = {"Kutto"},
["kpb"] = {"Mullu Kurumba"},
["kpc"] = {"Curripaco"},
["kpd"] = {"Koba"},
["kpe"] = {"Kpelle"},
["kpf"] = {"Komba"},
["kpg"] = {"Kapingamarangi"},
["kph"] = {"Kplang"},
["kpi"] = {"Kofei"},
["kpj"] = {"Karajá"},
["kpk"] = {"Kpan"},
["kpl"] = {"Kpala"},
["kpm"] = {"Koho"},
["kpn"] = {"Kepkiriwát"},
["kpo"] = {"Ikposo"},
["kpq"] = {"Korupun-Sela"},
["kpr"] = {"Korafe-Yegha"},
["kps"] = {"Tehit"},
["kpt"] = {"Karata"},
["kpu"] = {"Kafoa"},
["kpv"] = {"Komi-Zyrian"},
["kpw"] = {"Kobon"},
["kpx"] = {"Mountain Koiali"},
["kpy"] = {"Koryak"},
["kpz"] = {"Kupsabiny"},
["kqa"] = {"Mum"},
["kqb"] = {"Kovai"},
["kqc"] = {"Doromu-Koki"},
["kqd"] = {"Koy Sanjaq Surat"},
["kqe"] = {"Kalagan"},
["kqf"] = {"Kakabai"},
["kqg"] = {"Khe"},
["kqh"] = {"Kisankasa"},
["kqi"] = {"Koitabu"},
["kqj"] = {"Koromira"},
["kqk"] = {"Kotafon Gbe"},
["kql"] = {"Kyenele"},
["kqm"] = {"Khisa"},
["kqn"] = {"Kaonde"},
["kqo"] = {"Eastern Krahn"},
["kqp"] = {"Kimré"},
["kqq"] = {"Krenak"},
["kqr"] = {"Kimaragang"},
["kqs"] = {"Northern Kissi"},
["kqt"] = {"Klias River Kadazan"},
["kqu"] = {"Seroa"},
["kqv"] = {"Okolod"},
["kqw"] = {"Kandas"},
["kqx"] = {"Mser"},
["kqy"] = {"Koorete"},
["kqz"] = {"Korana"},
["kra"] = {"Kumhali"},
["krb"] = {"Karkin"},
["krc"] = {"Karachay-Balkar"},
["krd"] = {"Kairui-Midiki"},
["kre"] = {"Panará"},
["krf"] = {"Koro (Vanuatu)"},
["krh"] = {"Kurama"},
["kri"] = {"Krio"},
["krj"] = {"Kinaray-A"},
["krk"] = {"Kerek"},
["krl"] = {"Karelian"},
["krn"] = {"Sapo"},
["kro"] = {"Kru languages"},
["krp"] = {"Durop"},
["krr"] = {"Krung"},
["krs"] = {"Gbaya (Sudan)"},
["krt"] = {"Tumari Kanuri"},
["kru"] = {"Kurukh"},
["krv"] = {"Kavet"},
["krw"] = {"Western Krahn"},
["krx"] = {"Karon"},
["kry"] = {"Kryts"},
["krz"] = {"Sota Kanum"},
["ksb"] = {"Shambala"},
["ksc"] = {"Southern Kalinga"},
["ksd"] = {"Kuanua"},
["kse"] = {"Kuni"},
["ksf"] = {"Bafia"},
["ksg"] = {"Kusaghe"},
["ksh"] = {"Kölsch"},
["ksi"] = {"Krisa", "I'saka"},
["ksj"] = {"Uare"},
["ksk"] = {"Kansa"},
["ksl"] = {"Kumalu"},
["ksm"] = {"Kumba"},
["ksn"] = {"Kasiguranin"},
["kso"] = {"Kofa"},
["ksp"] = {"Kaba"},
["ksq"] = {"Kwaami"},
["ksr"] = {"Borong"},
["kss"] = {"Southern Kisi"},
["kst"] = {"Winyé"},
["ksu"] = {"Khamyang"},
["ksv"] = {"Kusu"},
["ksw"] = {"S'gaw Karen"},
["ksx"] = {"Kedang"},
["ksy"] = {"Kharia Thar"},
["ksz"] = {"Kodaku"},
["kta"] = {"Katua"},
["ktb"] = {"Kambaata"},
["ktc"] = {"Kholok"},
["ktd"] = {"Kokata", "Kukatha"},
["kte"] = {"Nubri"},
["ktf"] = {"Kwami"},
["ktg"] = {"Kalkutung"},
["kth"] = {"Karanga"},
["kti"] = {"North Muyu"},
["ktj"] = {"Plapo Krumen"},
["ktk"] = {"Kaniet"},
["ktl"] = {"Koroshi"},
["ktm"] = {"Kurti"},
["ktn"] = {"Karitiâna"},
["kto"] = {"Kuot"},
["ktp"] = {"Kaduo"},
["ktq"] = {"Katabaga"},
["kts"] = {"South Muyu"},
["ktt"] = {"Ketum"},
["ktu"] = {"Kituba (Democratic Republic of Congo)"},
["ktv"] = {"Eastern Katu"},
["ktw"] = {"Kato"},
["ktx"] = {"Kaxararí"},
["kty"] = {"Kango (Bas-Uélé District)"},
["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"},
["kub"] = {"Kutep"},
["kuc"] = {"Kwinsu"},
["kud"] = {"'Auhelawa"},
["kue"] = {"Kuman (Papua New Guinea)"},
["kuf"] = {"Western Katu"},
["kug"] = {"Kupa"},
["kuh"] = {"Kushi"},
["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"},
["kuj"] = {"Kuria"},
["kuk"] = {"Kepo'"},
["kul"] = {"Kulere"},
["kum"] = {"Kumyk"},
["kun"] = {"Kunama"},
["kuo"] = {"Kumukio"},
["kup"] = {"Kunimaipa"},
["kuq"] = {"Karipuna"},
["kus"] = {"Kusaal"},
["kut"] = {"Kutenai"},
["kuu"] = {"Upper Kuskokwim"},
["kuv"] = {"Kur"},
["kuw"] = {"Kpagua"},
["kux"] = {"Kukatja"},
["kuy"] = {"Kuuku-Ya'u"},
["kuz"] = {"Kunza"},
["kva"] = {"Bagvalal"},
["kvb"] = {"Kubu"},
["kvc"] = {"Kove"},
["kvd"] = {"Kui (Indonesia)"},
["kve"] = {"Kalabakan"},
["kvf"] = {"Kabalai"},
["kvg"] = {"Kuni-Boazi"},
["kvh"] = {"Komodo"},
["kvi"] = {"Kwang"},
["kvj"] = {"Psikye"},
["kvk"] = {"Korean Sign Language"},
["kvl"] = {"Kayaw"},
["kvm"] = {"Kendem"},
["kvn"] = {"Border Kuna"},
["kvo"] = {"Dobel"},
["kvp"] = {"Kompane"},
["kvq"] = {"Geba Karen"},
["kvr"] = {"Kerinci"},
["kvt"] = {"Lahta Karen", "Lahta"},
["kvu"] = {"Yinbaw Karen"},
["kvv"] = {"Kola"},
["kvw"] = {"Wersing"},
["kvx"] = {"Parkari Koli"},
["kvy"] = {"Yintale Karen", "Yintale"},
["kvz"] = {"Tsakwambo", "Tsaukambo"},
["kwa"] = {"Dâw"},
["kwb"] = {"Kwa"},
["kwc"] = {"Likwala"},
["kwd"] = {"Kwaio"},
["kwe"] = {"Kwerba"},
["kwf"] = {"Kwara'ae"},
["kwg"] = {"Sara Kaba Deme"},
["kwh"] = {"Kowiai"},
["kwi"] = {"Awa-Cuaiquer"},
["kwj"] = {"Kwanga"},
["kwk"] = {"Kwakiutl"},
["kwl"] = {"Kofyar"},
["kwm"] = {"Kwambi"},
["kwn"] = {"Kwangali"},
["kwo"] = {"Kwomtari"},
["kwp"] = {"Kodia"},
["kwr"] = {"Kwer"},
["kws"] = {"Kwese"},
["kwt"] = {"Kwesten"},
["kwu"] = {"Kwakum"},
["kwv"] = {"Sara Kaba Náà"},
["kww"] = {"Kwinti"},
["kwx"] = {"Khirwar"},
["kwy"] = {"San Salvador Kongo"},
["kwz"] = {"Kwadi"},
["kxa"] = {"Kairiru"},
["kxb"] = {"Krobu"},
["kxc"] = {"Konso", "Khonso"},
["kxd"] = {"Brunei"},
["kxf"] = {"Manumanaw Karen", "Manumanaw"},
["kxh"] = {"Karo (Ethiopia)"},
["kxi"] = {"Keningau Murut"},
["kxj"] = {"Kulfa"},
["kxk"] = {"Zayein Karen"},
["kxm"] = {"Northern Khmer"},
["kxn"] = {"Kanowit-Tanjong Melanau"},
["kxo"] = {"Kanoé"},
["kxp"] = {"Wadiyara Koli"},
["kxq"] = {"Smärky Kanum"},
["kxr"] = {"Koro (Papua New Guinea)"},
["kxs"] = {"Kangjia"},
["kxt"] = {"Koiwat"},
["kxv"] = {"Kuvi"},
["kxw"] = {"Konai"},
["kxx"] = {"Likuba"},
["kxy"] = {"Kayong"},
["kxz"] = {"Kerewo"},
["kya"] = {"Kwaya"},
["kyb"] = {"Butbut Kalinga"},
["kyc"] = {"Kyaka"},
["kyd"] = {"Karey"},
["kye"] = {"Krache"},
["kyf"] = {"Kouya"},
["kyg"] = {"Keyagana"},
["kyh"] = {"Karok"},
["kyi"] = {"Kiput"},
["kyj"] = {"Karao"},
["kyk"] = {"Kamayo"},
["kyl"] = {"Kalapuya"},
["kym"] = {"Kpatili"},
["kyn"] = {"Northern Binukidnon"},
["kyo"] = {"Kelon"},
["kyp"] = {"Kang"},
["kyq"] = {"Kenga"},
["kyr"] = {"Kuruáya"},
["kys"] = {"Baram Kayan"},
["kyt"] = {"Kayagar"},
["kyu"] = {"Western Kayah"},
["kyv"] = {"Kayort"},
["kyw"] = {"Kudmali"},
["kyx"] = {"Rapoisi"},
["kyy"] = {"Kambaira"},
["kyz"] = {"Kayabí"},
["kza"] = {"Western Karaboro"},
["kzb"] = {"Kaibobo"},
["kzc"] = {"Bondoukou Kulango"},
["kzd"] = {"Kadai"},
["kze"] = {"Kosena"},
["kzf"] = {"Da'a Kaili"},
["kzg"] = {"Kikai"},
["kzi"] = {"Kelabit"},
["kzk"] = {"Kazukuru"},
["kzl"] = {"Kayeli"},
["kzm"] = {"Kais"},
["kzn"] = {"Kokola"},
["kzo"] = {"Kaningi"},
["kzp"] = {"Kaidipang"},
["kzq"] = {"Kaike"},
["kzr"] = {"Karang"},
["kzs"] = {"Sugut Dusun"},
["kzu"] = {"Kayupulau"},
["kzv"] = {"Komyandaret"},
["kzw"] = {"Karirí-Xocó"},
["kzx"] = {"Kamarian"},
["kzy"] = {"Kango (Tshopo District)"},
["kzz"] = {"Kalabra"},
["laa"] = {"Southern Subanen"},
["lab"] = {"Linear A"},
["lac"] = {"Lacandon"},
["lad"] = {"Ladino"},
["lae"] = {"Pattani"},
["laf"] = {"Lafofa"},
["lag"] = {"Rangi"},
["lah"] = {"Lahnda"},
["lai"] = {"Lambya"},
["laj"] = {"Lango (Uganda)"},
["lal"] = {"Lalia"},
["lam"] = {"Lamba"},
["lan"] = {"Laru"},
["lap"] = {"Laka (Chad)"},
["laq"] = {"Qabiao"},
["lar"] = {"Larteh"},
["las"] = {"Lama (Togo)"},
["lau"] = {"Laba"},
["law"] = {"Lauje"},
["lax"] = {"Tiwa"},
["lay"] = {"Lama Bai"},
["laz"] = {"Aribwatsa"},
["lbb"] = {"Label"},
["lbc"] = {"Lakkia"},
["lbe"] = {"Lak"},
["lbf"] = {"Tinani"},
["lbg"] = {"Laopang"},
["lbi"] = {"La'bi"},
["lbj"] = {"Ladakhi"},
["lbk"] = {"Central Bontok"},
["lbl"] = {"Libon Bikol"},
["lbm"] = {"Lodhi"},
["lbn"] = {"Rmeet"},
["lbo"] = {"Laven"},
["lbq"] = {"Wampar"},
["lbr"] = {"Lohorung"},
["lbs"] = {"Libyan Sign Language"},
["lbt"] = {"Lachi"},
["lbu"] = {"Labu"},
["lbv"] = {"Lavatbura-Lamusong"},
["lbw"] = {"Tolaki"},
["lbx"] = {"Lawangan"},
["lby"] = {"Lamalama", "Lamu-Lamu"},
["lbz"] = {"Lardil"},
["lcc"] = {"Legenyem"},
["lcd"] = {"Lola"},
["lce"] = {"Loncong", "Sekak"},
["lcf"] = {"Lubu"},
["lch"] = {"Luchazi"},
["lcl"] = {"Lisela"},
["lcm"] = {"Tungag"},
["lcp"] = {"Western Lawa"},
["lcq"] = {"Luhu"},
["lcs"] = {"Lisabata-Nuniali"},
["lda"] = {"Kla-Dan"},
["ldb"] = {"Dũya"},
["ldd"] = {"Luri"},
["ldg"] = {"Lenyima"},
["ldh"] = {"Lamja-Dengsa-Tola"},
["ldi"] = {"Laari"},
["ldj"] = {"Lemoro"},
["ldk"] = {"Leelau"},
["ldl"] = {"Kaan"},
["ldm"] = {"Landoma"},
["ldn"] = {"Láadan"},
["ldo"] = {"Loo"},
["ldp"] = {"Tso"},
["ldq"] = {"Lufu"},
["lea"] = {"Lega-Shabunda"},
["leb"] = {"Lala-Bisa"},
["lec"] = {"Leco"},
["led"] = {"Lendu"},
["lee"] = {"Lyélé"},
["lef"] = {"Lelemi"},
["leh"] = {"Lenje"},
["lei"] = {"Lemio"},
["lej"] = {"Lengola"},
["lek"] = {"Leipon"},
["lel"] = {"Lele (Democratic Republic of Congo)"},
["lem"] = {"Nomaande"},
["len"] = {"Lenca"},
["leo"] = {"Leti (Cameroon)"},
["lep"] = {"Lepcha"},
["leq"] = {"Lembena"},
["ler"] = {"Lenkau"},
["les"] = {"Lese"},
["let"] = {"Lesing-Gelimi", "Amio-Gelimi"},
["leu"] = {"Kara (Papua New Guinea)"},
["lev"] = {"Lamma"},
["lew"] = {"Ledo Kaili"},
["lex"] = {"Luang"},
["ley"] = {"Lemolang"},
["lez"] = {"Lezghian"},
["lfa"] = {"Lefa"},
["lfn"] = {"Lingua Franca Nova"},
["lga"] = {"Lungga"},
["lgb"] = {"Laghu"},
["lgg"] = {"Lugbara"},
["lgh"] = {"Laghuu"},
["lgi"] = {"Lengilu"},
["lgk"] = {"Lingarak", "Neverver"},
["lgl"] = {"Wala"},
["lgm"] = {"Lega-Mwenga"},
["lgn"] = {"T'apo", "Opuuo"},
["lgo"] = {"Lango (South Sudan)"},
["lgq"] = {"Logba"},
["lgr"] = {"Lengo"},
["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"},
["lgt"] = {"Pahi"},
["lgu"] = {"Longgu"},
["lgz"] = {"Ligenza"},
["lha"] = {"Laha (Viet Nam)"},
["lhh"] = {"Laha (Indonesia)"},
["lhi"] = {"Lahu Shi"},
["lhl"] = {"Lahul Lohar"},
["lhm"] = {"Lhomi"},
["lhn"] = {"Lahanan"},
["lhp"] = {"Lhokpu"},
["lhs"] = {"Mlahsö"},
["lht"] = {"Lo-Toga"},
["lhu"] = {"Lahu"},
["lia"] = {"West-Central Limba"},
["lib"] = {"Likum"},
["lic"] = {"Hlai"},
["lid"] = {"Nyindrou"},
["lie"] = {"Likila"},
["lif"] = {"Limbu"},
["lig"] = {"Ligbi"},
["lih"] = {"Lihir"},
["lij"] = {"Ligurian"},
["lik"] = {"Lika"},
["lil"] = {"Lillooet"},
["lio"] = {"Liki"},
["lip"] = {"Sekpele"},
["liq"] = {"Libido"},
["lir"] = {"Liberian English"},
["lis"] = {"Lisu"},
["liu"] = {"Logorik"},
["liv"] = {"Liv"},
["liw"] = {"Col"},
["lix"] = {"Liabuku"},
["liy"] = {"Banda-Bambari"},
["liz"] = {"Libinza"},
["lja"] = {"Golpa"},
["lje"] = {"Rampi"},
["lji"] = {"Laiyolo"},
["ljl"] = {"Li'o"},
["ljp"] = {"Lampung Api"},
["ljw"] = {"Yirandali"},
["ljx"] = {"Yuru"},
["lka"] = {"Lakalei"},
["lkb"] = {"Kabras", "Lukabaras"},
["lkc"] = {"Kucong"},
["lkd"] = {"Lakondê"},
["lke"] = {"Kenyi"},
["lkh"] = {"Lakha"},
["lki"] = {"Laki"},
["lkj"] = {"Remun"},
["lkl"] = {"Laeko-Libuat"},
["lkm"] = {"Kalaamaya"},
["lkn"] = {"Lakon", "Vure"},
["lko"] = {"Khayo", "Olukhayo"},
["lkr"] = {"Päri"},
["lks"] = {"Kisa", "Olushisa"},
["lkt"] = {"Lakota"},
["lku"] = {"Kungkari"},
["lky"] = {"Lokoya"},
["lla"] = {"Lala-Roba"},
["llb"] = {"Lolo"},
["llc"] = {"Lele (Guinea)"},
["lld"] = {"Ladin"},
["lle"] = {"Lele (Papua New Guinea)"},
["llf"] = {"Hermit"},
["llg"] = {"Lole"},
["llh"] = {"Lamu"},
["lli"] = {"Teke-Laali"},
["llj"] = {"Ladji Ladji"},
["llk"] = {"Lelak"},
["lll"] = {"Lilau"},
["llm"] = {"Lasalimu"},
["lln"] = {"Lele (Chad)"},
["llp"] = {"North Efate"},
["llq"] = {"Lolak"},
["lls"] = {"Lithuanian Sign Language"},
["llu"] = {"Lau"},
["llx"] = {"Lauan"},
["lma"] = {"East Limba"},
["lmb"] = {"Merei"},
["lmc"] = {"Limilngan"},
["lmd"] = {"Lumun"},
["lme"] = {"Pévé"},
["lmf"] = {"South Lembata"},
["lmg"] = {"Lamogai"},
["lmh"] = {"Lambichhong"},
["lmi"] = {"Lombi"},
["lmj"] = {"West Lembata"},
["lmk"] = {"Lamkang"},
["lml"] = {"Hano"},
["lmn"] = {"Lambadi"},
["lmo"] = {"Lombard"},
["lmp"] = {"Limbum"},
["lmq"] = {"Lamatuka"},
["lmr"] = {"Lamalera"},
["lmu"] = {"Lamenu"},
["lmv"] = {"Lomaiviti"},
["lmw"] = {"Lake Miwok"},
["lmx"] = {"Laimbue"},
["lmy"] = {"Lamboya"},
["lna"] = {"Langbashe"},
["lnb"] = {"Mbalanhu"},
["lnd"] = {"Lundayeh", "Lun Bawang"},
["lng"] = {"Langobardic"},
["lnh"] = {"Lanoh"},
["lni"] = {"Daantanai'"},
["lnj"] = {"Leningitij"},
["lnl"] = {"South Central Banda"},
["lnm"] = {"Langam"},
["lnn"] = {"Lorediakarkar"},
["lns"] = {"Lamnso'"},
["lnu"] = {"Longuda"},
["lnw"] = {"Lanima"},
["lnz"] = {"Lonzo"},
["loa"] = {"Loloda"},
["lob"] = {"Lobi"},
["loc"] = {"Inonhan"},
["loe"] = {"Saluan"},
["lof"] = {"Logol"},
["log"] = {"Logo"},
["loh"] = {"Laarim", "Narim"},
["loi"] = {"Loma (Côte d'Ivoire)"},
["loj"] = {"Lou"},
["lok"] = {"Loko"},
["lol"] = {"Mongo"},
["lom"] = {"Loma (Liberia)"},
["lon"] = {"Malawi Lomwe"},
["loo"] = {"Lombo"},
["lop"] = {"Lopa"},
["loq"] = {"Lobala"},
["lor"] = {"Téén"},
["los"] = {"Loniu"},
["lot"] = {"Otuho"},
["lou"] = {"Louisiana Creole"},
["lov"] = {"Lopi"},
["low"] = {"Tampias Lobu"},
["lox"] = {"Loun"},
["loy"] = {"Loke"},
["loz"] = {"Lozi"},
["lpa"] = {"Lelepa"},
["lpe"] = {"Lepki"},
["lpn"] = {"Long Phuri Naga"},
["lpo"] = {"Lipo"},
["lpx"] = {"Lopit"},
["lqr"] = {"Logir"},
["lra"] = {"Rara Bakati'"},
["lrc"] = {"Northern Luri"},
["lre"] = {"Laurentian"},
["lrg"] = {"Laragia"},
["lri"] = {"Marachi", "Olumarachi"},
["lrk"] = {"Loarki"},
["lrl"] = {"Lari"},
["lrm"] = {"Marama", "Olumarama"},
["lrn"] = {"Lorang"},
["lro"] = {"Laro"},
["lrr"] = {"Southern Yamphu"},
["lrt"] = {"Larantuka Malay"},
["lrv"] = {"Larevat"},
["lrz"] = {"Lemerig"},
["lsa"] = {"Lasgerdi"},
["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"},
["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"},
["lsd"] = {"Lishana Deni"},
["lse"] = {"Lusengo"},
["lsh"] = {"Lish"},
["lsi"] = {"Lashi"},
["lsl"] = {"Latvian Sign Language"},
["lsm"] = {"Saamia", "Olusamia"},
["lsn"] = {"Tibetan Sign Language"},
["lso"] = {"Laos Sign Language"},
["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"},
["lsr"] = {"Aruop"},
["lss"] = {"Lasi"},
["lst"] = {"Trinidad and Tobago Sign Language"},
["lsv"] = {"Sivia Sign Language"},
["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"},
["lsy"] = {"Mauritian Sign Language"},
["ltc"] = {"Late Middle Chinese"},
["ltg"] = {"Latgalian"},
["lth"] = {"Thur"},
["lti"] = {"Leti (Indonesia)"},
["ltn"] = {"Latundê"},
["lto"] = {"Tsotso", "Olutsotso"},
["lts"] = {"Tachoni", "Lutachoni"},
["ltu"] = {"Latu"},
["lua"] = {"Luba-Lulua"},
["luc"] = {"Aringa"},
["lud"] = {"Ludian"},
["lue"] = {"Luvale"},
["luf"] = {"Laua"},
["lui"] = {"Luiseno"},
["luj"] = {"Luna"},
["luk"] = {"Lunanakha"},
["lul"] = {"Olu'bo"},
["lum"] = {"Luimbi"},
["lun"] = {"Lunda"},
["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"},
["lup"] = {"Lumbu"},
["luq"] = {"Lucumi"},
["lur"] = {"Laura"},
["lus"] = {"Lushai"},
["lut"] = {"Lushootseed"},
["luu"] = {"Lumba-Yakkha"},
["luv"] = {"Luwati"},
["luw"] = {"Luo (Cameroon)"},
["luy"] = {"Luyia", "Oluluyia"},
["luz"] = {"Southern Luri"},
["lva"] = {"Maku'a"},
["lvi"] = {"Lavi"},
["lvk"] = {"Lavukaleve"},
["lvl"] = {"Lwel"},
["lvs"] = {"Standard Latvian"},
["lvu"] = {"Levuka"},
["lwa"] = {"Lwalu"},
["lwe"] = {"Lewo Eleng"},
["lwg"] = {"Wanga", "Oluwanga"},
["lwh"] = {"White Lachi"},
["lwl"] = {"Eastern Lawa"},
["lwm"] = {"Laomian"},
["lwo"] = {"Luwo"},
["lws"] = {"Malawian Sign Language"},
["lwt"] = {"Lewotobi"},
["lwu"] = {"Lawu"},
["lww"] = {"Lewo"},
["lxm"] = {"Lakurumau"},
["lya"] = {"Layakha"},
["lyg"] = {"Lyngngam"},
["lyn"] = {"Luyana"},
["lzh"] = {"Literary Chinese"},
["lzl"] = {"Litzlitz"},
["lzn"] = {"Leinong Naga"},
["lzz"] = {"Laz"},
["maa"] = {"San Jerónimo Tecóatl Mazatec"},
["mab"] = {"Yutanduchi Mixtec"},
["mad"] = {"Madurese"},
["mae"] = {"Bo-Rukul"},
["maf"] = {"Mafa"},
["mag"] = {"Magahi"},
["mai"] = {"Maithili"},
["maj"] = {"Jalapa De Díaz Mazatec"},
["mak"] = {"Makasar"},
["mam"] = {"Mam"},
["man"] = {"Mandingo", "Manding"},
["map"] = {"Austronesian languages"},
["maq"] = {"Chiquihuitlán Mazatec"},
["mas"] = {"Masai"},
["mat"] = {"San Francisco Matlatzinca"},
["mau"] = {"Huautla Mazatec"},
["mav"] = {"Sateré-Mawé"},
["maw"] = {"Mampruli"},
["max"] = {"North Moluccan Malay"},
["maz"] = {"Central Mazahua"},
["mba"] = {"Higaonon"},
["mbb"] = {"Western Bukidnon Manobo"},
["mbc"] = {"Macushi"},
["mbd"] = {"Dibabawon Manobo"},
["mbe"] = {"Molale"},
["mbf"] = {"Baba Malay"},
["mbh"] = {"Mangseng"},
["mbi"] = {"Ilianen Manobo"},
["mbj"] = {"Nadëb"},
["mbk"] = {"Malol"},
["mbl"] = {"Maxakalí"},
["mbm"] = {"Ombamba"},
["mbn"] = {"Macaguán"},
["mbo"] = {"Mbo (Cameroon)"},
["mbp"] = {"Malayo"},
["mbq"] = {"Maisin"},
["mbr"] = {"Nukak Makú"},
["mbs"] = {"Sarangani Manobo"},
["mbt"] = {"Matigsalug Manobo"},
["mbu"] = {"Mbula-Bwazza"},
["mbv"] = {"Mbulungish"},
["mbw"] = {"Maring"},
["mbx"] = {"Mari (East Sepik Province)"},
["mby"] = {"Memoni"},
["mbz"] = {"Amoltepec Mixtec"},
["mca"] = {"Maca"},
["mcb"] = {"Machiguenga"},
["mcc"] = {"Bitur"},
["mcd"] = {"Sharanahua"},
["mce"] = {"Itundujia Mixtec"},
["mcf"] = {"Matsés"},
["mcg"] = {"Mapoyo"},
["mch"] = {"Maquiritari"},
["mci"] = {"Mese"},
["mcj"] = {"Mvanip"},
["mck"] = {"Mbunda"},
["mcl"] = {"Macaguaje"},
["mcm"] = {"Malaccan Creole Portuguese"},
["mcn"] = {"Masana"},
["mco"] = {"Coatlán Mixe"},
["mcp"] = {"Makaa"},
["mcq"] = {"Ese"},
["mcr"] = {"Menya"},
["mcs"] = {"Mambai"},
["mct"] = {"Mengisa"},
["mcu"] = {"Cameroon Mambila"},
["mcv"] = {"Minanibai"},
["mcw"] = {"Mawa (Chad)"},
["mcx"] = {"Mpiemo"},
["mcy"] = {"South Watut"},
["mcz"] = {"Mawan"},
["mda"] = {"Mada (Nigeria)"},
["mdb"] = {"Morigi"},
["mdc"] = {"Male (Papua New Guinea)"},
["mdd"] = {"Mbum"},
["mde"] = {"Maba (Chad)"},
["mdf"] = {"Moksha"},
["mdg"] = {"Massalat"},
["mdh"] = {"Maguindanaon"},
["mdi"] = {"Mamvu"},
["mdj"] = {"Mangbetu"},
["mdk"] = {"Mangbutu"},
["mdl"] = {"Maltese Sign Language"},
["mdm"] = {"Mayogo"},
["mdn"] = {"Mbati"},
["mdp"] = {"Mbala"},
["mdq"] = {"Mbole"},
["mdr"] = {"Mandar"},
["mds"] = {"Maria (Papua New Guinea)"},
["mdt"] = {"Mbere"},
["mdu"] = {"Mboko"},
["mdv"] = {"Santa Lucía Monteverde Mixtec"},
["mdw"] = {"Mbosi"},
["mdx"] = {"Dizin"},
["mdy"] = {"Male (Ethiopia)"},
["mdz"] = {"Suruí Do Pará"},
["mea"] = {"Menka"},
["meb"] = {"Ikobi"},
["mec"] = {"Marra"},
["med"] = {"Melpa"},
["mee"] = {"Mengen"},
["mef"] = {"Megam"},
["meh"] = {"Southwestern Tlaxiaco Mixtec"},
["mei"] = {"Midob"},
["mej"] = {"Meyah"},
["mek"] = {"Mekeo"},
["mel"] = {"Central Melanau"},
["mem"] = {"Mangala"},
["men"] = {"Mende (Sierra Leone)"},
["meo"] = {"Kedah Malay"},
["mep"] = {"Miriwoong"},
["meq"] = {"Merey"},
["mer"] = {"Meru"},
["mes"] = {"Masmaje"},
["met"] = {"Mato"},
["meu"] = {"Motu"},
["mev"] = {"Mano"},
["mew"] = {"Maaka"},
["mey"] = {"Hassaniyya"},
["mez"] = {"Menominee"},
["mfa"] = {"Pattani Malay"},
["mfb"] = {"Bangka"},
["mfc"] = {"Mba"},
["mfd"] = {"Mendankwe-Nkwen"},
["mfe"] = {"Morisyen"},
["mff"] = {"Naki"},
["mfg"] = {"Mogofin"},
["mfh"] = {"Matal"},
["mfi"] = {"Wandala"},
["mfj"] = {"Mefele"},
["mfk"] = {"North Mofu"},
["mfl"] = {"Putai"},
["mfm"] = {"Marghi South"},
["mfn"] = {"Cross River Mbembe"},
["mfo"] = {"Mbe"},
["mfp"] = {"Makassar Malay"},
["mfq"] = {"Moba"},
["mfr"] = {"Marrithiyel"},
["mfs"] = {"Mexican Sign Language"},
["mft"] = {"Mokerang"},
["mfu"] = {"Mbwela"},
["mfv"] = {"Mandjak"},
["mfw"] = {"Mulaha"},
["mfx"] = {"Melo"},
["mfy"] = {"Mayo"},
["mfz"] = {"Mabaan"},
["mga"] = {"Middle Irish (900-1200)"},
["mgb"] = {"Mararit"},
["mgc"] = {"Morokodo"},
["mgd"] = {"Moru"},
["mge"] = {"Mango"},
["mgf"] = {"Maklew"},
["mgg"] = {"Mpumpong"},
["mgh"] = {"Makhuwa-Meetto"},
["mgi"] = {"Lijili"},
["mgj"] = {"Abureni"},
["mgk"] = {"Mawes"},
["mgl"] = {"Maleu-Kilenge"},
["mgm"] = {"Mambae"},
["mgn"] = {"Mbangi"},
["mgo"] = {"Meta'"},
["mgp"] = {"Eastern Magar"},
["mgq"] = {"Malila"},
["mgr"] = {"Mambwe-Lungu"},
["mgs"] = {"Manda (Tanzania)"},
["mgt"] = {"Mongol"},
["mgu"] = {"Mailu"},
["mgv"] = {"Matengo"},
["mgw"] = {"Matumbi"},
["mgy"] = {"Mbunga"},
["mgz"] = {"Mbugwe"},
["mha"] = {"Manda (India)"},
["mhb"] = {"Mahongwe"},
["mhc"] = {"Mocho"},
["mhd"] = {"Mbugu"},
["mhe"] = {"Besisi", "Mah Meri"},
["mhf"] = {"Mamaa"},
["mhg"] = {"Margu"},
["mhi"] = {"Ma'di"},
["mhj"] = {"Mogholi"},
["mhk"] = {"Mungaka"},
["mhl"] = {"Mauwake"},
["mhm"] = {"Makhuwa-Moniga"},
["mhn"] = {"Mócheno"},
["mho"] = {"Mashi (Zambia)"},
["mhp"] = {"Balinese Malay"},
["mhq"] = {"Mandan"},
["mhr"] = {"Eastern Mari"},
["mhs"] = {"Buru (Indonesia)"},
["mht"] = {"Mandahuaca"},
["mhu"] = {"Digaro-Mishmi", "Darang Deng"},
["mhw"] = {"Mbukushu"},
["mhx"] = {"Maru", "Lhaovo"},
["mhy"] = {"Ma'anyan"},
["mhz"] = {"Mor (Mor Islands)"},
["mia"] = {"Miami"},
["mib"] = {"Atatláhuca Mixtec"},
["mic"] = {"Mi'kmaq", "Micmac"},
["mid"] = {"Mandaic"},
["mie"] = {"Ocotepec Mixtec"},
["mif"] = {"Mofu-Gudur"},
["mig"] = {"San Miguel El Grande Mixtec"},
["mih"] = {"Chayuco Mixtec"},
["mii"] = {"Chigmecatitlán Mixtec"},
["mij"] = {"Abar", "Mungbam"},
["mik"] = {"Mikasuki"},
["mil"] = {"Peñoles Mixtec"},
["mim"] = {"Alacatlatzala Mixtec"},
["min"] = {"Minangkabau"},
["mio"] = {"Pinotepa Nacional Mixtec"},
["mip"] = {"Apasco-Apoala Mixtec"},
["miq"] = {"Mískito"},
["mir"] = {"Isthmus Mixe"},
["mis"] = {"Uncoded languages"},
["mit"] = {"Southern Puebla Mixtec"},
["miu"] = {"Cacaloxtepec Mixtec"},
["miw"] = {"Akoye"},
["mix"] = {"Mixtepec Mixtec"},
["miy"] = {"Ayutla Mixtec"},
["miz"] = {"Coatzospan Mixtec"},
["mjb"] = {"Makalero"},
["mjc"] = {"San Juan Colorado Mixtec"},
["mjd"] = {"Northwest Maidu"},
["mje"] = {"Muskum"},
["mjg"] = {"Tu"},
["mjh"] = {"Mwera (Nyasa)"},
["mji"] = {"Kim Mun"},
["mjj"] = {"Mawak"},
["mjk"] = {"Matukar"},
["mjl"] = {"Mandeali"},
["mjm"] = {"Medebur"},
["mjn"] = {"Ma (Papua New Guinea)"},
["mjo"] = {"Malankuravan"},
["mjp"] = {"Malapandaram"},
["mjq"] = {"Malaryan"},
["mjr"] = {"Malavedan"},
["mjs"] = {"Miship"},
["mjt"] = {"Sauria Paharia"},
["mju"] = {"Manna-Dora"},
["mjv"] = {"Mannan"},
["mjw"] = {"Karbi"},
["mjx"] = {"Mahali"},
["mjy"] = {"Mahican"},
["mjz"] = {"Majhi"},
["mka"] = {"Mbre"},
["mkb"] = {"Mal Paharia"},
["mkc"] = {"Siliput"},
["mke"] = {"Mawchi"},
["mkf"] = {"Miya"},
["mkg"] = {"Mak (China)"},
["mkh"] = {"Mon-Khmer languages"},
["mki"] = {"Dhatki"},
["mkj"] = {"Mokilese"},
["mkk"] = {"Byep"},
["mkl"] = {"Mokole"},
["mkm"] = {"Moklen"},
["mkn"] = {"Kupang Malay"},
["mko"] = {"Mingang Doso"},
["mkp"] = {"Moikodi"},
["mkq"] = {"Bay Miwok"},
["mkr"] = {"Malas"},
["mks"] = {"Silacayoapan Mixtec"},
["mkt"] = {"Vamale"},
["mku"] = {"Konyanka Maninka"},
["mkv"] = {"Mafea"},
["mkw"] = {"Kituba (Congo)"},
["mkx"] = {"Kinamiging Manobo"},
["mky"] = {"East Makian"},
["mkz"] = {"Makasae"},
["mla"] = {"Malo"},
["mlb"] = {"Mbule"},
["mlc"] = {"Cao Lan"},
["mle"] = {"Manambu"},
["mlf"] = {"Mal"},
["mlh"] = {"Mape"},
["mli"] = {"Malimpung"},
["mlj"] = {"Miltu"},
["mlk"] = {"Ilwana", "Kiwilwana"},
["mll"] = {"Malua Bay"},
["mlm"] = {"Mulam"},
["mln"] = {"Malango"},
["mlo"] = {"Mlomp"},
["mlp"] = {"Bargam"},
["mlq"] = {"Western Maninkakan"},
["mlr"] = {"Vame"},
["mls"] = {"Masalit"},
["mlu"] = {"To'abaita"},
["mlv"] = {"Motlav", "Mwotlap"},
["mlw"] = {"Moloko"},
["mlx"] = {"Malfaxal", "Naha'ai"},
["mlz"] = {"Malaynon"},
["mma"] = {"Mama"},
["mmb"] = {"Momina"},
["mmc"] = {"Michoacán Mazahua"},
["mmd"] = {"Maonan"},
["mme"] = {"Mae"},
["mmf"] = {"Mundat"},
["mmg"] = {"North Ambrym"},
["mmh"] = {"Mehináku"},
["mmi"] = {"Musar"},
["mmj"] = {"Majhwar"},
["mmk"] = {"Mukha-Dora"},
["mml"] = {"Man Met"},
["mmm"] = {"Maii"},
["mmn"] = {"Mamanwa"},
["mmo"] = {"Mangga Buang"},
["mmp"] = {"Siawi"},
["mmq"] = {"Musak"},
["mmr"] = {"Western Xiangxi Miao"},
["mmt"] = {"Malalamai"},
["mmu"] = {"Mmaala"},
["mmv"] = {"Miriti"},
["mmw"] = {"Emae"},
["mmx"] = {"Madak"},
["mmy"] = {"Migaama"},
["mmz"] = {"Mabaale"},
["mna"] = {"Mbula"},
["mnb"] = {"Muna"},
["mnc"] = {"Manchu"},
["mnd"] = {"Mondé"},
["mne"] = {"Naba"},
["mnf"] = {"Mundani"},
["mng"] = {"Eastern Mnong"},
["mnh"] = {"Mono (Democratic Republic of Congo)"},
["mni"] = {"Manipuri"},
["mnj"] = {"Munji"},
["mnk"] = {"Mandinka"},
["mnl"] = {"Tiale"},
["mnm"] = {"Mapena"},
["mnn"] = {"Southern Mnong"},
["mno"] = {"Manobo languages"},
["mnp"] = {"Min Bei Chinese"},
["mnq"] = {"Minriq"},
["mnr"] = {"Mono (USA)"},
["mns"] = {"Mansi"},
["mnu"] = {"Mer"},
["mnv"] = {"Rennell-Bellona"},
["mnw"] = {"Mon"},
["mnx"] = {"Manikion"},
["mny"] = {"Manyawa"},
["mnz"] = {"Moni"},
["moa"] = {"Mwan"},
["moc"] = {"Mocoví"},
["mod"] = {"Mobilian"},
["moe"] = {"Innu", "Montagnais"},
["mog"] = {"Mongondow"},
["moh"] = {"Mohawk"},
["moi"] = {"Mboi"},
["moj"] = {"Monzombo"},
["mok"] = {"Morori"},
["mom"] = {"Mangue"},
["moo"] = {"Monom"},
["mop"] = {"Mopán Maya"},
["moq"] = {"Mor (Bomberai Peninsula)"},
["mor"] = {"Moro"},
["mos"] = {"Mossi"},
["mot"] = {"Barí"},
["mou"] = {"Mogum"},
["mov"] = {"Mohave"},
["mow"] = {"Moi (Congo)"},
["mox"] = {"Molima"},
["moy"] = {"Shekkacho"},
["moz"] = {"Mukulu", "Gergiko"},
["mpa"] = {"Mpoto"},
["mpb"] = {"Malak Malak", "Mullukmulluk"},
["mpc"] = {"Mangarrayi"},
["mpd"] = {"Machinere"},
["mpe"] = {"Majang"},
["mpg"] = {"Marba"},
["mph"] = {"Maung"},
["mpi"] = {"Mpade"},
["mpj"] = {"Martu Wangka", "Wangkajunga"},
["mpk"] = {"Mbara (Chad)"},
["mpl"] = {"Middle Watut"},
["mpm"] = {"Yosondúa Mixtec"},
["mpn"] = {"Mindiri"},
["mpo"] = {"Miu"},
["mpp"] = {"Migabac"},
["mpq"] = {"Matís"},
["mpr"] = {"Vangunu"},
["mps"] = {"Dadibi"},
["mpt"] = {"Mian"},
["mpu"] = {"Makuráp"},
["mpv"] = {"Mungkip"},
["mpw"] = {"Mapidian"},
["mpx"] = {"Misima-Panaeati"},
["mpy"] = {"Mapia"},
["mpz"] = {"Mpi"},
["mqa"] = {"Maba (Indonesia)"},
["mqb"] = {"Mbuko"},
["mqc"] = {"Mangole"},
["mqe"] = {"Matepi"},
["mqf"] = {"Momuna"},
["mqg"] = {"Kota Bangun Kutai Malay"},
["mqh"] = {"Tlazoyaltepec Mixtec"},
["mqi"] = {"Mariri"},
["mqj"] = {"Mamasa"},
["mqk"] = {"Rajah Kabunsuwan Manobo"},
["mql"] = {"Mbelime"},
["mqm"] = {"South Marquesan"},
["mqn"] = {"Moronene"},
["mqo"] = {"Modole"},
["mqp"] = {"Manipa"},
["mqq"] = {"Minokok"},
["mqr"] = {"Mander"},
["mqs"] = {"West Makian"},
["mqt"] = {"Mok"},
["mqu"] = {"Mandari"},
["mqv"] = {"Mosimo"},
["mqw"] = {"Murupi"},
["mqx"] = {"Mamuju"},
["mqy"] = {"Manggarai"},
["mqz"] = {"Pano"},
["mra"] = {"Mlabri"},
["mrb"] = {"Marino"},
["mrc"] = {"Maricopa"},
["mrd"] = {"Western Magar"},
["mre"] = {"Martha's Vineyard Sign Language"},
["mrf"] = {"Elseng"},
["mrg"] = {"Mising"},
["mrh"] = {"Mara Chin"},
["mrj"] = {"Western Mari"},
["mrk"] = {"Hmwaveke"},
["mrl"] = {"Mortlockese"},
["mrm"] = {"Merlav", "Mwerlap"},
["mrn"] = {"Cheke Holo"},
["mro"] = {"Mru"},
["mrp"] = {"Morouas"},
["mrq"] = {"North Marquesan"},
["mrr"] = {"Maria (India)"},
["mrs"] = {"Maragus"},
["mrt"] = {"Marghi Central"},
["mru"] = {"Mono (Cameroon)"},
["mrv"] = {"Mangareva"},
["mrw"] = {"Maranao"},
["mrx"] = {"Maremgi", "Dineor"},
["mry"] = {"Mandaya"},
["mrz"] = {"Marind"},
["msb"] = {"Masbatenyo"},
["msc"] = {"Sankaran Maninka"},
["msd"] = {"Yucatec Maya Sign Language"},
["mse"] = {"Musey"},
["msf"] = {"Mekwei"},
["msg"] = {"Moraid"},
["msh"] = {"Masikoro Malagasy"},
["msi"] = {"Sabah Malay"},
["msj"] = {"Ma (Democratic Republic of Congo)"},
["msk"] = {"Mansaka"},
["msl"] = {"Molof", "Poule"},
["msm"] = {"Agusan Manobo"},
["msn"] = {"Vurës"},
["mso"] = {"Mombum"},
["msp"] = {"Maritsauá"},
["msq"] = {"Caac"},
["msr"] = {"Mongolian Sign Language"},
["mss"] = {"West Masela"},
["msu"] = {"Musom"},
["msv"] = {"Maslam"},
["msw"] = {"Mansoanka"},
["msx"] = {"Moresada"},
["msy"] = {"Aruamu"},
["msz"] = {"Momare"},
["mta"] = {"Cotabato Manobo"},
["mtb"] = {"Anyin Morofo"},
["mtc"] = {"Munit"},
["mtd"] = {"Mualang"},
["mte"] = {"Mono (Solomon Islands)"},
["mtf"] = {"Murik (Papua New Guinea)"},
["mtg"] = {"Una"},
["mth"] = {"Munggui"},
["mti"] = {"Maiwa (Papua New Guinea)"},
["mtj"] = {"Moskona"},
["mtk"] = {"Mbe'"},
["mtl"] = {"Montol"},
["mtm"] = {"Mator"},
["mtn"] = {"Matagalpa"},
["mto"] = {"Totontepec Mixe"},
["mtp"] = {"Wichí Lhamtés Nocten"},
["mtq"] = {"Muong"},
["mtr"] = {"Mewari"},
["mts"] = {"Yora"},
["mtt"] = {"Mota"},
["mtu"] = {"Tututepec Mixtec"},
["mtv"] = {"Asaro'o"},
["mtw"] = {"Southern Binukidnon"},
["mtx"] = {"Tidaá Mixtec"},
["mty"] = {"Nabi"},
["mua"] = {"Mundang"},
["mub"] = {"Mubi"},
["muc"] = {"Ajumbu"},
["mud"] = {"Mednyj Aleut"},
["mue"] = {"Media Lengua"},
["mug"] = {"Musgu"},
["muh"] = {"Mündü"},
["mui"] = {"Musi"},
["muj"] = {"Mabire"},
["muk"] = {"Mugom"},
["mul"] = {"Multiple languages"},
["mum"] = {"Maiwala"},
["mun"] = {"Munda languages"},
["muo"] = {"Nyong"},
["mup"] = {"Malvi"},
["muq"] = {"Eastern Xiangxi Miao"},
["mur"] = {"Murle"},
["mus"] = {"Creek"},
["mut"] = {"Western Muria"},
["muu"] = {"Yaaku"},
["muv"] = {"Muthuvan"},
["mux"] = {"Bo-Ung"},
["muy"] = {"Muyang"},
["muz"] = {"Mursi"},
["mva"] = {"Manam"},
["mvb"] = {"Mattole"},
["mvd"] = {"Mamboru"},
["mve"] = {"Marwari (Pakistan)"},
["mvf"] = {"Peripheral Mongolian"},
["mvg"] = {"Yucuañe Mixtec"},
["mvh"] = {"Mulgi"},
["mvi"] = {"Miyako"},
["mvk"] = {"Mekmek"},
["mvl"] = {"Mbara (Australia)"},
["mvn"] = {"Minaveha"},
["mvo"] = {"Marovo"},
["mvp"] = {"Duri"},
["mvq"] = {"Moere"},
["mvr"] = {"Marau"},
["mvs"] = {"Massep"},
["mvt"] = {"Mpotovoro"},
["mvu"] = {"Marfa"},
["mvv"] = {"Tagal Murut"},
["mvw"] = {"Machinga"},
["mvx"] = {"Meoswar"},
["mvy"] = {"Indus Kohistani"},
["mvz"] = {"Mesqan"},
["mwa"] = {"Mwatebu"},
["mwb"] = {"Juwal"},
["mwc"] = {"Are"},
["mwe"] = {"Mwera (Chimwera)"},
["mwf"] = {"Murrinh-Patha"},
["mwg"] = {"Aiklep"},
["mwh"] = {"Mouk-Aria"},
["mwi"] = {"Labo", "Ninde"},
["mwk"] = {"Kita Maninkakan"},
["mwl"] = {"Mirandese"},
["mwm"] = {"Sar"},
["mwn"] = {"Nyamwanga"},
["mwo"] = {"Central Maewo"},
["mwp"] = {"Kala Lagaw Ya"},
["mwq"] = {"Mün Chin"},
["mwr"] = {"Marwari"},
["mws"] = {"Mwimbi-Muthambi"},
["mwt"] = {"Moken"},
["mwu"] = {"Mittu"},
["mwv"] = {"Mentawai"},
["mww"] = {"Hmong Daw"},
["mwz"] = {"Moingi"},
["mxa"] = {"Northwest Oaxaca Mixtec"},
["mxb"] = {"Tezoatlán Mixtec"},
["mxc"] = {"Manyika"},
["mxd"] = {"Modang"},
["mxe"] = {"Mele-Fila"},
["mxf"] = {"Malgbe"},
["mxg"] = {"Mbangala"},
["mxh"] = {"Mvuba"},
["mxi"] = {"Mozarabic"},
["mxj"] = {"Miju-Mishmi", "Geman Deng"},
["mxk"] = {"Monumbo"},
["mxl"] = {"Maxi Gbe"},
["mxm"] = {"Meramera"},
["mxn"] = {"Moi (Indonesia)"},
["mxo"] = {"Mbowe"},
["mxp"] = {"Tlahuitoltepec Mixe"},
["mxq"] = {"Juquila Mixe"},
["mxr"] = {"Murik (Malaysia)"},
["mxs"] = {"Huitepec Mixtec"},
["mxt"] = {"Jamiltepec Mixtec"},
["mxu"] = {"Mada (Cameroon)"},
["mxv"] = {"Metlatónoc Mixtec"},
["mxw"] = {"Namo"},
["mxx"] = {"Mahou", "Mawukakan"},
["mxy"] = {"Southeastern Nochixtlán Mixtec"},
["mxz"] = {"Central Masela"},
["myb"] = {"Mbay"},
["myc"] = {"Mayeka"},
["mye"] = {"Myene"},
["myf"] = {"Bambassi"},
["myg"] = {"Manta"},
["myh"] = {"Makah"},
["myj"] = {"Mangayat"},
["myk"] = {"Mamara Senoufo"},
["myl"] = {"Moma"},
["mym"] = {"Me'en"},
["myn"] = {"Mayan languages"},
["myo"] = {"Anfillo"},
["myp"] = {"Pirahã"},
["myr"] = {"Muniche"},
["mys"] = {"Mesmes"},
["myu"] = {"Mundurukú"},
["myv"] = {"Erzya"},
["myw"] = {"Muyuw"},
["myx"] = {"Masaaba"},
["myy"] = {"Macuna"},
["myz"] = {"Classical Mandaic"},
["mza"] = {"Santa María Zacatepec Mixtec"},
["mzb"] = {"Tumzabt"},
["mzc"] = {"Madagascar Sign Language"},
["mzd"] = {"Malimba"},
["mze"] = {"Morawa"},
["mzg"] = {"Monastic Sign Language"},
["mzh"] = {"Wichí Lhamtés Güisnay"},
["mzi"] = {"Ixcatlán Mazatec"},
["mzj"] = {"Manya"},
["mzk"] = {"Nigeria Mambila"},
["mzl"] = {"Mazatlán Mixe"},
["mzm"] = {"Mumuye"},
["mzn"] = {"Mazanderani"},
["mzo"] = {"Matipuhy"},
["mzp"] = {"Movima"},
["mzq"] = {"Mori Atas"},
["mzr"] = {"Marúbo"},
["mzs"] = {"Macanese"},
["mzt"] = {"Mintil"},
["mzu"] = {"Inapang"},
["mzv"] = {"Manza"},
["mzw"] = {"Deg"},
["mzx"] = {"Mawayana"},
["mzy"] = {"Mozambican Sign Language"},
["mzz"] = {"Maiadomu"},
["naa"] = {"Namla"},
["nab"] = {"Southern Nambikuára"},
["nac"] = {"Narak"},
["nae"] = {"Naka'ela"},
["naf"] = {"Nabak"},
["nag"] = {"Naga Pidgin"},
["nah"] = {"Nahuatl languages"},
["nai"] = {"North American Indian languages"},
["naj"] = {"Nalu"},
["nak"] = {"Nakanai"},
["nal"] = {"Nalik"},
["nam"] = {"Ngan'gityemerri"},
["nan"] = {"Min Nan Chinese"},
["nao"] = {"Naaba"},
["nap"] = {"Neapolitan"},
["naq"] = {"Khoekhoe", "Nama (Namibia)"},
["nar"] = {"Iguta"},
["nas"] = {"Naasioi"},
["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"},
["naw"] = {"Nawuri"},
["nax"] = {"Nakwi"},
["nay"] = {"Ngarrindjeri"},
["naz"] = {"Coatepec Nahuatl"},
["nba"] = {"Nyemba"},
["nbb"] = {"Ndoe"},
["nbc"] = {"Chang Naga"},
["nbd"] = {"Ngbinda"},
["nbe"] = {"Konyak Naga"},
["nbg"] = {"Nagarchal"},
["nbh"] = {"Ngamo"},
["nbi"] = {"Mao Naga"},
["nbj"] = {"Ngarinyman"},
["nbk"] = {"Nake"},
["nbm"] = {"Ngbaka Ma'bo"},
["nbn"] = {"Kuri"},
["nbo"] = {"Nkukoli"},
["nbp"] = {"Nnam"},
["nbq"] = {"Nggem"},
["nbr"] = {"Numana"},
["nbs"] = {"Namibian Sign Language"},
["nbt"] = {"Na"},
["nbu"] = {"Rongmei Naga"},
["nbv"] = {"Ngamambo"},
["nbw"] = {"Southern Ngbandi"},
["nby"] = {"Ningera"},
["nca"] = {"Iyo"},
["ncb"] = {"Central Nicobarese"},
["ncc"] = {"Ponam"},
["ncd"] = {"Nachering"},
["nce"] = {"Yale"},
["ncf"] = {"Notsi"},
["ncg"] = {"Nisga'a"},
["nch"] = {"Central Huasteca Nahuatl"},
["nci"] = {"Classical Nahuatl"},
["ncj"] = {"Northern Puebla Nahuatl"},
["nck"] = {"Na-kara"},
["ncl"] = {"Michoacán Nahuatl"},
["ncm"] = {"Nambo"},
["ncn"] = {"Nauna"},
["nco"] = {"Sibe"},
["ncq"] = {"Northern Katang"},
["ncr"] = {"Ncane"},
["ncs"] = {"Nicaraguan Sign Language"},
["nct"] = {"Chothe Naga"},
["ncu"] = {"Chumburung"},
["ncx"] = {"Central Puebla Nahuatl"},
["ncz"] = {"Natchez"},
["nda"] = {"Ndasa"},
["ndb"] = {"Kenswei Nsei"},
["ndc"] = {"Ndau"},
["ndd"] = {"Nde-Nsele-Nta"},
["ndf"] = {"Nadruvian"},
["ndg"] = {"Ndengereko"},
["ndh"] = {"Ndali"},
["ndi"] = {"Samba Leko"},
["ndj"] = {"Ndamba"},
["ndk"] = {"Ndaka"},
["ndl"] = {"Ndolo"},
["ndm"] = {"Ndam"},
["ndn"] = {"Ngundi"},
["ndp"] = {"Ndo"},
["ndq"] = {"Ndombe"},
["ndr"] = {"Ndoola"},
["nds"] = {"Low German", "Low Saxon"},
["ndt"] = {"Ndunga"},
["ndu"] = {"Dugun"},
["ndv"] = {"Ndut"},
["ndw"] = {"Ndobo"},
["ndx"] = {"Nduga"},
["ndy"] = {"Lutos"},
["ndz"] = {"Ndogo"},
["nea"] = {"Eastern Ngad'a"},
["neb"] = {"Toura (Côte d'Ivoire)"},
["nec"] = {"Nedebang"},
["ned"] = {"Nde-Gbite"},
["nee"] = {"Nêlêmwa-Nixumwak"},
["nef"] = {"Nefamese"},
["neg"] = {"Negidal"},
["neh"] = {"Nyenkha"},
["nei"] = {"Neo-Hittite"},
["nej"] = {"Neko"},
["nek"] = {"Neku"},
["nem"] = {"Nemi"},
["nen"] = {"Nengone"},
["neo"] = {"Ná-Meo"},
["neq"] = {"North Central Mixe"},
["ner"] = {"Yahadian"},
["nes"] = {"Bhoti Kinnauri"},
["net"] = {"Nete"},
["neu"] = {"Neo"},
["nev"] = {"Nyaheun"},
["new"] = {"Newari", "Nepal Bhasa"},
["nex"] = {"Neme"},
["ney"] = {"Neyo"},
["nez"] = {"Nez Perce"},
["nfa"] = {"Dhao"},
["nfd"] = {"Ahwai"},
["nfl"] = {"Ayiwo", "Äiwoo"},
["nfr"] = {"Nafaanra"},
["nfu"] = {"Mfumte"},
["nga"] = {"Ngbaka"},
["ngb"] = {"Northern Ngbandi"},
["ngc"] = {"Ngombe (Democratic Republic of Congo)"},
["ngd"] = {"Ngando (Central African Republic)"},
["nge"] = {"Ngemba"},
["ngf"] = {"Trans-New Guinea languages"},
["ngg"] = {"Ngbaka Manza"},
["ngh"] = {"Nǁng"},
["ngi"] = {"Ngizim"},
["ngj"] = {"Ngie"},
["ngk"] = {"Dalabon"},
["ngl"] = {"Lomwe"},
["ngm"] = {"Ngatik Men's Creole"},
["ngn"] = {"Ngwo"},
["ngp"] = {"Ngulu"},
["ngq"] = {"Ngurimi", "Ngoreme"},
["ngr"] = {"Engdewu"},
["ngs"] = {"Gvoko"},
["ngt"] = {"Kriang", "Ngeq"},
["ngu"] = {"Guerrero Nahuatl"},
["ngv"] = {"Nagumi"},
["ngw"] = {"Ngwaba"},
["ngx"] = {"Nggwahyi"},
["ngy"] = {"Tibea"},
["ngz"] = {"Ngungwel"},
["nha"] = {"Nhanda"},
["nhb"] = {"Beng"},
["nhc"] = {"Tabasco Nahuatl"},
["nhd"] = {"Chiripá", "Ava Guaraní"},
["nhe"] = {"Eastern Huasteca Nahuatl"},
["nhf"] = {"Nhuwala"},
["nhg"] = {"Tetelcingo Nahuatl"},
["nhh"] = {"Nahari"},
["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"},
["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"},
["nhm"] = {"Morelos Nahuatl"},
["nhn"] = {"Central Nahuatl"},
["nho"] = {"Takuu"},
["nhp"] = {"Isthmus-Pajapan Nahuatl"},
["nhq"] = {"Huaxcaleca Nahuatl"},
["nhr"] = {"Naro"},
["nht"] = {"Ometepec Nahuatl"},
["nhu"] = {"Noone"},
["nhv"] = {"Temascaltepec Nahuatl"},
["nhw"] = {"Western Huasteca Nahuatl"},
["nhx"] = {"Isthmus-Mecayapan Nahuatl"},
["nhy"] = {"Northern Oaxaca Nahuatl"},
["nhz"] = {"Santa María La Alta Nahuatl"},
["nia"] = {"Nias"},
["nib"] = {"Nakame"},
["nic"] = {"Niger-Kordofanian languages"},
["nid"] = {"Ngandi"},
["nie"] = {"Niellim"},
["nif"] = {"Nek"},
["nig"] = {"Ngalakgan"},
["nih"] = {"Nyiha (Tanzania)"},
["nii"] = {"Nii"},
["nij"] = {"Ngaju"},
["nik"] = {"Southern Nicobarese"},
["nil"] = {"Nila"},
["nim"] = {"Nilamba"},
["nin"] = {"Ninzo"},
["nio"] = {"Nganasan"},
["niq"] = {"Nandi"},
["nir"] = {"Nimboran"},
["nis"] = {"Nimi"},
["nit"] = {"Southeastern Kolami"},
["niu"] = {"Niuean"},
["niv"] = {"Gilyak"},
["niw"] = {"Nimo"},
["nix"] = {"Hema"},
["niy"] = {"Ngiti"},
["niz"] = {"Ningil"},
["nja"] = {"Nzanyi"},
["njb"] = {"Nocte Naga"},
["njd"] = {"Ndonde Hamba"},
["njh"] = {"Lotha Naga"},
["nji"] = {"Gudanji"},
["njj"] = {"Njen"},
["njl"] = {"Njalgulgule"},
["njm"] = {"Angami Naga"},
["njn"] = {"Liangmai Naga"},
["njo"] = {"Ao Naga"},
["njr"] = {"Njerep"},
["njs"] = {"Nisa"},
["njt"] = {"Ndyuka-Trio Pidgin"},
["nju"] = {"Ngadjunmaya"},
["njx"] = {"Kunyi"},
["njy"] = {"Njyem"},
["njz"] = {"Nyishi"},
["nka"] = {"Nkoya"},
["nkb"] = {"Khoibu Naga"},
["nkc"] = {"Nkongho"},
["nkd"] = {"Koireng"},
["nke"] = {"Duke"},
["nkf"] = {"Inpui Naga"},
["nkg"] = {"Nekgini"},
["nkh"] = {"Khezha Naga"},
["nki"] = {"Thangal Naga"},
["nkj"] = {"Nakai"},
["nkk"] = {"Nokuku"},
["nkm"] = {"Namat"},
["nkn"] = {"Nkangala"},
["nko"] = {"Nkonya"},
["nkp"] = {"Niuatoputapu"},
["nkq"] = {"Nkami"},
["nkr"] = {"Nukuoro"},
["nks"] = {"North Asmat"},
["nkt"] = {"Nyika (Tanzania)"},
["nku"] = {"Bouna Kulango"},
["nkv"] = {"Nyika (Malawi and Zambia)"},
["nkw"] = {"Nkutu"},
["nkx"] = {"Nkoroo"},
["nkz"] = {"Nkari"},
["nla"] = {"Ngombale"},
["nlc"] = {"Nalca"},
["nle"] = {"East Nyala"},
["nlg"] = {"Gela"},
["nli"] = {"Grangali"},
["nlj"] = {"Nyali"},
["nlk"] = {"Ninia Yali"},
["nll"] = {"Nihali"},
["nlm"] = {"Mankiyali"},
["nlo"] = {"Ngul"},
["nlq"] = {"Lao Naga"},
["nlu"] = {"Nchumbulu"},
["nlv"] = {"Orizaba Nahuatl"},
["nlw"] = {"Walangama"},
["nlx"] = {"Nahali"},
["nly"] = {"Nyamal"},
["nlz"] = {"Nalögo"},
["nma"] = {"Maram Naga"},
["nmb"] = {"Big Nambas", "V'ënen Taut"},
["nmc"] = {"Ngam"},
["nmd"] = {"Ndumu"},
["nme"] = {"Mzieme Naga"},
["nmf"] = {"Tangkhul Naga (India)"},
["nmg"] = {"Kwasio"},
["nmh"] = {"Monsang Naga"},
["nmi"] = {"Nyam"},
["nmj"] = {"Ngombe (Central African Republic)"},
["nmk"] = {"Namakura"},
["nml"] = {"Ndemli"},
["nmm"] = {"Manangba"},
["nmn"] = {"ǃXóõ"},
["nmo"] = {"Moyon Naga"},
["nmp"] = {"Nimanbur"},
["nmq"] = {"Nambya"},
["nmr"] = {"Nimbari"},
["nms"] = {"Letemboi"},
["nmt"] = {"Namonuito"},
["nmu"] = {"Northeast Maidu"},
["nmv"] = {"Ngamini"},
["nmw"] = {"Nimoa", "Rifao"},
["nmx"] = {"Nama (Papua New Guinea)"},
["nmy"] = {"Namuyi"},
["nmz"] = {"Nawdm"},
["nna"] = {"Nyangumarta"},
["nnb"] = {"Nande"},
["nnc"] = {"Nancere"},
["nnd"] = {"West Ambae"},
["nne"] = {"Ngandyera"},
["nnf"] = {"Ngaing"},
["nng"] = {"Maring Naga"},
["nnh"] = {"Ngiemboon"},
["nni"] = {"North Nuaulu"},
["nnj"] = {"Nyangatom"},
["nnk"] = {"Nankina"},
["nnl"] = {"Northern Rengma Naga"},
["nnm"] = {"Namia"},
["nnn"] = {"Ngete"},
["nnp"] = {"Wancho Naga"},
["nnq"] = {"Ngindo"},
["nnr"] = {"Narungga"},
["nnt"] = {"Nanticoke"},
["nnu"] = {"Dwang"},
["nnv"] = {"Nugunu (Australia)"},
["nnw"] = {"Southern Nuni"},
["nny"] = {"Nyangga"},
["nnz"] = {"Nda'nda'"},
["noa"] = {"Woun Meu"},
["noc"] = {"Nuk"},
["nod"] = {"Northern Thai"},
["noe"] = {"Nimadi"},
["nof"] = {"Nomane"},
["nog"] = {"Nogai"},
["noh"] = {"Nomu"},
["noi"] = {"Noiri"},
["noj"] = {"Nonuya"},
["nok"] = {"Nooksack"},
["nol"] = {"Nomlaki"},
["non"] = {"Old Norse"},
["nop"] = {"Numanggang"},
["noq"] = {"Ngongo"},
["nos"] = {"Eastern Nisu"},
["not"] = {"Nomatsiguenga"},
["nou"] = {"Ewage-Notu"},
["nov"] = {"Novial"},
["now"] = {"Nyambo"},
["noy"] = {"Noy"},
["noz"] = {"Nayi"},
["npa"] = {"Nar Phu"},
["npb"] = {"Nupbikha"},
["npg"] = {"Ponyo-Gongwang Naga"},
["nph"] = {"Phom Naga"},
["npi"] = {"Nepali (individual language)"},
["npl"] = {"Southeastern Puebla Nahuatl"},
["npn"] = {"Mondropolon"},
["npo"] = {"Pochuri Naga"},
["nps"] = {"Nipsan"},
["npu"] = {"Puimei Naga"},
["npx"] = {"Noipx"},
["npy"] = {"Napu"},
["nqg"] = {"Southern Nago"},
["nqk"] = {"Kura Ede Nago"},
["nql"] = {"Ngendelengo"},
["nqm"] = {"Ndom"},
["nqn"] = {"Nen"},
["nqo"] = {"N'Ko", "N’Ko"},
["nqq"] = {"Kyan-Karyaw Naga"},
["nqt"] = {"Nteng"},
["nqy"] = {"Akyaung Ari Naga"},
["nra"] = {"Ngom"},
["nrb"] = {"Nara"},
["nrc"] = {"Noric"},
["nre"] = {"Southern Rengma Naga"},
["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"},
["nrg"] = {"Narango"},
["nri"] = {"Chokri Naga"},
["nrk"] = {"Ngarla"},
["nrl"] = {"Ngarluma"},
["nrm"] = {"Narom"},
["nrn"] = {"Norn"},
["nrp"] = {"North Picene"},
["nrr"] = {"Norra", "Nora"},
["nrt"] = {"Northern Kalapuya"},
["nru"] = {"Narua"},
["nrx"] = {"Ngurmbur"},
["nrz"] = {"Lala"},
["nsa"] = {"Sangtam Naga"},
["nsb"] = {"Lower Nossob"},
["nsc"] = {"Nshi"},
["nsd"] = {"Southern Nisu"},
["nse"] = {"Nsenga"},
["nsf"] = {"Northwestern Nisu"},
["nsg"] = {"Ngasa"},
["nsh"] = {"Ngoshie"},
["nsi"] = {"Nigerian Sign Language"},
["nsk"] = {"Naskapi"},
["nsl"] = {"Norwegian Sign Language"},
["nsm"] = {"Sumi Naga"},
["nsn"] = {"Nehan"},
["nso"] = {"Pedi", "Northern Sotho", "Sepedi"},
["nsp"] = {"Nepalese Sign Language"},
["nsq"] = {"Northern Sierra Miwok"},
["nsr"] = {"Maritime Sign Language"},
["nss"] = {"Nali"},
["nst"] = {"Tase Naga"},
["nsu"] = {"Sierra Negra Nahuatl"},
["nsv"] = {"Southwestern Nisu"},
["nsw"] = {"Navut"},
["nsx"] = {"Nsongo"},
["nsy"] = {"Nasal"},
["nsz"] = {"Nisenan"},
["ntd"] = {"Northern Tidung"},
["nte"] = {"Nathembo"},
["ntg"] = {"Ngantangarra"},
["nti"] = {"Natioro"},
["ntj"] = {"Ngaanyatjarra"},
["ntk"] = {"Ikoma-Nata-Isenye"},
["ntm"] = {"Nateni"},
["nto"] = {"Ntomba"},
["ntp"] = {"Northern Tepehuan"},
["ntr"] = {"Delo"},
["ntu"] = {"Natügu"},
["ntw"] = {"Nottoway"},
["ntx"] = {"Tangkhul Naga (Myanmar)"},
["nty"] = {"Mantsi"},
["ntz"] = {"Natanzi"},
["nua"] = {"Yuanga"},
["nub"] = {"Nubian languages"},
["nuc"] = {"Nukuini"},
["nud"] = {"Ngala"},
["nue"] = {"Ngundu"},
["nuf"] = {"Nusu"},
["nug"] = {"Nungali"},
["nuh"] = {"Ndunda"},
["nui"] = {"Ngumbi"},
["nuj"] = {"Nyole"},
["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"},
["nul"] = {"Nusa Laut"},
["num"] = {"Niuafo'ou"},
["nun"] = {"Anong"},
["nuo"] = {"Nguôn"},
["nup"] = {"Nupe-Nupe-Tako"},
["nuq"] = {"Nukumanu"},
["nur"] = {"Nukuria"},
["nus"] = {"Nuer"},
["nut"] = {"Nung (Viet Nam)"},
["nuu"] = {"Ngbundu"},
["nuv"] = {"Northern Nuni"},
["nuw"] = {"Nguluwan"},
["nux"] = {"Mehek"},
["nuy"] = {"Nunggubuyu"},
["nuz"] = {"Tlamacazapa Nahuatl"},
["nvh"] = {"Nasarian"},
["nvm"] = {"Namiae"},
["nvo"] = {"Nyokon"},
["nwa"] = {"Nawathinehena"},
["nwb"] = {"Nyabwa"},
["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"},
["nwe"] = {"Ngwe"},
["nwg"] = {"Ngayawung"},
["nwi"] = {"Southwest Tanna"},
["nwm"] = {"Nyamusa-Molo"},
["nwo"] = {"Nauo"},
["nwr"] = {"Nawaru"},
["nww"] = {"Ndwewe"},
["nwx"] = {"Middle Newar"},
["nwy"] = {"Nottoway-Meherrin"},
["nxa"] = {"Nauete"},
["nxd"] = {"Ngando (Democratic Republic of Congo)"},
["nxe"] = {"Nage"},
["nxg"] = {"Ngad'a"},
["nxi"] = {"Nindi"},
["nxk"] = {"Koki Naga"},
["nxl"] = {"South Nuaulu"},
["nxm"] = {"Numidian"},
["nxn"] = {"Ngawun"},
["nxo"] = {"Ndambomo"},
["nxq"] = {"Naxi"},
["nxr"] = {"Ninggerum"},
["nxx"] = {"Nafri"},
["nyb"] = {"Nyangbo"},
["nyc"] = {"Nyanga-li"},
["nyd"] = {"Nyore", "Olunyole"},
["nye"] = {"Nyengo"},
["nyf"] = {"Giryama", "Kigiryama"},
["nyg"] = {"Nyindu"},
["nyh"] = {"Nyikina"},
["nyi"] = {"Ama (Sudan)"},
["nyj"] = {"Nyanga"},
["nyk"] = {"Nyaneka"},
["nyl"] = {"Nyeu"},
["nym"] = {"Nyamwezi"},
["nyn"] = {"Nyankole"},
["nyo"] = {"Nyoro"},
["nyp"] = {"Nyang'i"},
["nyq"] = {"Nayini"},
["nyr"] = {"Nyiha (Malawi)"},
["nys"] = {"Nyungar"},
["nyt"] = {"Nyawaygi"},
["nyu"] = {"Nyungwe"},
["nyv"] = {"Nyulnyul"},
["nyw"] = {"Nyaw"},
["nyx"] = {"Nganyaywana"},
["nyy"] = {"Nyakyusa-Ngonde"},
["nza"] = {"Tigon Mbembe"},
["nzb"] = {"Njebi"},
["nzd"] = {"Nzadi"},
["nzi"] = {"Nzima"},
["nzk"] = {"Nzakara"},
["nzm"] = {"Zeme Naga"},
["nzr"] = {"Dir-Nyamzak-Mbarimi"},
["nzs"] = {"New Zealand Sign Language"},
["nzu"] = {"Teke-Nzikou"},
["nzy"] = {"Nzakambay"},
["nzz"] = {"Nanga Dama Dogon"},
["oaa"] = {"Orok"},
["oac"] = {"Oroch"},
["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"},
["oav"] = {"Old Avar"},
["obi"] = {"Obispeño"},
["obk"] = {"Southern Bontok"},
["obl"] = {"Oblo"},
["obm"] = {"Moabite"},
["obo"] = {"Obo Manobo"},
["obr"] = {"Old Burmese"},
["obt"] = {"Old Breton"},
["obu"] = {"Obulom"},
["oca"] = {"Ocaina"},
["och"] = {"Old Chinese"},
["ocm"] = {"Old Cham"},
["oco"] = {"Old Cornish"},
["ocu"] = {"Atzingo Matlatzinca"},
["oda"] = {"Odut"},
["odk"] = {"Od"},
["odt"] = {"Old Dutch"},
["odu"] = {"Odual"},
["ofo"] = {"Ofo"},
["ofs"] = {"Old Frisian"},
["ofu"] = {"Efutop"},
["ogb"] = {"Ogbia"},
["ogc"] = {"Ogbah"},
["oge"] = {"Old Georgian"},
["ogg"] = {"Ogbogolo"},
["ogo"] = {"Khana"},
["ogu"] = {"Ogbronuagum"},
["oht"] = {"Old Hittite"},
["ohu"] = {"Old Hungarian"},
["oia"] = {"Oirata"},
["oie"] = {"Okolie"},
["oin"] = {"Inebu One"},
["ojb"] = {"Northwestern Ojibwa"},
["ojc"] = {"Central Ojibwa"},
["ojg"] = {"Eastern Ojibwa"},
["ojp"] = {"Old Japanese"},
["ojs"] = {"Severn Ojibwa"},
["ojv"] = {"Ontong Java"},
["ojw"] = {"Western Ojibwa"},
["oka"] = {"Okanagan"},
["okb"] = {"Okobo"},
["okc"] = {"Kobo"},
["okd"] = {"Okodia"},
["oke"] = {"Okpe (Southwestern Edo)"},
["okg"] = {"Koko Babangk"},
["okh"] = {"Koresh-e Rostam"},
["oki"] = {"Okiek"},
["okj"] = {"Oko-Juwoi"},
["okk"] = {"Kwamtim One"},
["okl"] = {"Old Kentish Sign Language"},
["okm"] = {"Middle Korean (10th-16th cent.)"},
["okn"] = {"Oki-No-Erabu"},
["oko"] = {"Old Korean (3rd-9th cent.)"},
["okr"] = {"Kirike"},
["oks"] = {"Oko-Eni-Osayen"},
["oku"] = {"Oku"},
["okv"] = {"Orokaiva"},
["okx"] = {"Okpe (Northwestern Edo)"},
["okz"] = {"Old Khmer"},
["ola"] = {"Walungge"},
["old"] = {"Mochi"},
["ole"] = {"Olekha"},
["olk"] = {"Olkol"},
["olm"] = {"Oloma"},
["olo"] = {"Livvi"},
["olr"] = {"Olrat"},
["olt"] = {"Old Lithuanian"},
["olu"] = {"Kuvale"},
["oma"] = {"Omaha-Ponca"},
["omb"] = {"East Ambae"},
["omc"] = {"Mochica"},
["omg"] = {"Omagua"},
["omi"] = {"Omi"},
["omk"] = {"Omok"},
["oml"] = {"Ombo"},
["omn"] = {"Minoan"},
["omo"] = {"Utarmbung"},
["omp"] = {"Old Manipuri"},
["omq"] = {"Oto-Manguean languages"},
["omr"] = {"Old Marathi"},
["omt"] = {"Omotik"},
["omu"] = {"Omurano"},
["omv"] = {"Omotic languages"},
["omw"] = {"South Tairora"},
["omx"] = {"Old Mon"},
["omy"] = {"Old Malay"},
["ona"] = {"Ona"},
["onb"] = {"Lingao"},
["one"] = {"Oneida"},
["ong"] = {"Olo"},
["oni"] = {"Onin"},
["onj"] = {"Onjob"},
["onk"] = {"Kabore One"},
["onn"] = {"Onobasulu"},
["ono"] = {"Onondaga"},
["onp"] = {"Sartang"},
["onr"] = {"Northern One"},
["ons"] = {"Ono"},
["ont"] = {"Ontenu"},
["onu"] = {"Unua"},
["onw"] = {"Old Nubian"},
["onx"] = {"Onin Based Pidgin"},
["ood"] = {"Tohono O'odham"},
["oog"] = {"Ong"},
["oon"] = {"Önge"},
["oor"] = {"Oorlams"},
["oos"] = {"Old Ossetic"},
["opa"] = {"Okpamheri"},
["opk"] = {"Kopkaka"},
["opm"] = {"Oksapmin"},
["opo"] = {"Opao"},
["opt"] = {"Opata"},
["opy"] = {"Ofayé"},
["ora"] = {"Oroha"},
["orc"] = {"Orma"},
["ore"] = {"Orejón"},
["org"] = {"Oring"},
["orh"] = {"Oroqen"},
["orn"] = {"Orang Kanaq"},
["oro"] = {"Orokolo"},
["orr"] = {"Oruma"},
["ors"] = {"Orang Seletar"},
["ort"] = {"Adivasi Oriya"},
["oru"] = {"Ormuri"},
["orv"] = {"Old Russian"},
["orw"] = {"Oro Win"},
["orx"] = {"Oro"},
["ory"] = {"Odia (individual language)", "Oriya (individual language)"},
["orz"] = {"Ormu"},
["osa"] = {"Osage"},
["osc"] = {"Oscan"},
["osi"] = {"Osing"},
["osn"] = {"Old Sundanese"},
["oso"] = {"Ososo"},
["osp"] = {"Old Spanish"},
["ost"] = {"Osatu"},
["osu"] = {"Southern One"},
["osx"] = {"Old Saxon"},
["ota"] = {"Ottoman Turkish (1500-1928)"},
["otb"] = {"Old Tibetan"},
["otd"] = {"Ot Danum"},
["ote"] = {"Mezquital Otomi"},
["oti"] = {"Oti"},
["otk"] = {"Old Turkish"},
["otl"] = {"Tilapa Otomi"},
["otm"] = {"Eastern Highland Otomi"},
["otn"] = {"Tenango Otomi"},
["oto"] = {"Otomian languages"},
["otq"] = {"Querétaro Otomi"},
["otr"] = {"Otoro"},
["ots"] = {"Estado de México Otomi"},
["ott"] = {"Temoaya Otomi"},
["otu"] = {"Otuke"},
["otw"] = {"Ottawa"},
["otx"] = {"Texcatepec Otomi"},
["oty"] = {"Old Tamil"},
["otz"] = {"Ixtenco Otomi"},
["oua"] = {"Tagargrent"},
["oub"] = {"Glio-Oubi"},
["oue"] = {"Oune"},
["oui"] = {"Old Uighur"},
["oum"] = {"Ouma"},
["ovd"] = {"Elfdalian", "Övdalian"},
["owi"] = {"Owiniga"},
["owl"] = {"Old Welsh"},
["oyb"] = {"Oy"},
["oyd"] = {"Oyda"},
["oym"] = {"Wayampi"},
["oyy"] = {"Oya'oya"},
["ozm"] = {"Koonzime"},
["paa"] = {"Papuan languages"},
["pab"] = {"Parecís"},
["pac"] = {"Pacoh"},
["pad"] = {"Paumarí"},
["pae"] = {"Pagibete"},
["paf"] = {"Paranawát"},
["pag"] = {"Pangasinan"},
["pah"] = {"Tenharim"},
["pai"] = {"Pe"},
["pak"] = {"Parakanã"},
["pal"] = {"Pahlavi"},
["pam"] = {"Pampanga", "Kapampangan"},
["pao"] = {"Northern Paiute"},
["pap"] = {"Papiamento"},
["paq"] = {"Parya"},
["par"] = {"Panamint", "Timbisha"},
["pas"] = {"Papasena"},
["pau"] = {"Palauan"},
["pav"] = {"Pakaásnovos"},
["paw"] = {"Pawnee"},
["pax"] = {"Pankararé"},
["pay"] = {"Pech"},
["paz"] = {"Pankararú"},
["pbb"] = {"Páez"},
["pbc"] = {"Patamona"},
["pbe"] = {"Mezontla Popoloca"},
["pbf"] = {"Coyotepec Popoloca"},
["pbg"] = {"Paraujano"},
["pbh"] = {"E'ñapa Woromaipu"},
["pbi"] = {"Parkwa"},
["pbl"] = {"Mak (Nigeria)"},
["pbm"] = {"Puebla Mazatec"},
["pbn"] = {"Kpasam"},
["pbo"] = {"Papel"},
["pbp"] = {"Badyara"},
["pbr"] = {"Pangwa"},
["pbs"] = {"Central Pame"},
["pbt"] = {"Southern Pashto"},
["pbu"] = {"Northern Pashto"},
["pbv"] = {"Pnar"},
["pby"] = {"Pyu (Papua New Guinea)"},
["pca"] = {"Santa Inés Ahuatempan Popoloca"},
["pcb"] = {"Pear"},
["pcc"] = {"Bouyei"},
["pcd"] = {"Picard"},
["pce"] = {"Ruching Palaung"},
["pcf"] = {"Paliyan"},
["pcg"] = {"Paniya"},
["pch"] = {"Pardhan"},
["pci"] = {"Duruwa"},
["pcj"] = {"Parenga"},
["pck"] = {"Paite Chin"},
["pcl"] = {"Pardhi"},
["pcm"] = {"Nigerian Pidgin"},
["pcn"] = {"Piti"},
["pcp"] = {"Pacahuara"},
["pcw"] = {"Pyapun"},
["pda"] = {"Anam"},
["pdc"] = {"Pennsylvania German"},
["pdi"] = {"Pa Di"},
["pdn"] = {"Podena", "Fedan"},
["pdo"] = {"Padoe"},
["pdt"] = {"Plautdietsch"},
["pdu"] = {"Kayan"},
["pea"] = {"Peranakan Indonesian"},
["peb"] = {"Eastern Pomo"},
["ped"] = {"Mala (Papua New Guinea)"},
["pee"] = {"Taje"},
["pef"] = {"Northeastern Pomo"},
["peg"] = {"Pengo"},
["peh"] = {"Bonan"},
["pei"] = {"Chichimeca-Jonaz"},
["pej"] = {"Northern Pomo"},
["pek"] = {"Penchal"},
["pel"] = {"Pekal"},
["pem"] = {"Phende"},
["peo"] = {"Old Persian (ca. 600-400 B.C.)"},
["pep"] = {"Kunja"},
["peq"] = {"Southern Pomo"},
["pes"] = {"Iranian Persian"},
["pev"] = {"Pémono"},
["pex"] = {"Petats"},
["pey"] = {"Petjo"},
["pez"] = {"Eastern Penan"},
["pfa"] = {"Pááfang"},
["pfe"] = {"Pere"},
["pfl"] = {"Pfaelzisch"},
["pga"] = {"Sudanese Creole Arabic"},
["pgd"] = {"Gāndhārī"},
["pgg"] = {"Pangwali"},
["pgi"] = {"Pagi"},
["pgk"] = {"Rerep"},
["pgl"] = {"Primitive Irish"},
["pgn"] = {"Paelignian"},
["pgs"] = {"Pangseng"},
["pgu"] = {"Pagu"},
["pgz"] = {"Papua New Guinean Sign Language"},
["pha"] = {"Pa-Hng"},
["phd"] = {"Phudagi"},
["phg"] = {"Phuong"},
["phh"] = {"Phukha"},
["phi"] = {"Philippine languages"},
["phj"] = {"Pahari"},
["phk"] = {"Phake"},
["phl"] = {"Phalura", "Palula"},
["phm"] = {"Phimbi"},
["phn"] = {"Phoenician"},
["pho"] = {"Phunoi"},
["phq"] = {"Phana'"},
["phr"] = {"Pahari-Potwari"},
["pht"] = {"Phu Thai"},
["phu"] = {"Phuan"},
["phv"] = {"Pahlavani"},
["phw"] = {"Phangduwali"},
["pia"] = {"Pima Bajo"},
["pib"] = {"Yine"},
["pic"] = {"Pinji"},
["pid"] = {"Piaroa"},
["pie"] = {"Piro"},
["pif"] = {"Pingelapese"},
["pig"] = {"Pisabo"},
["pih"] = {"Pitcairn-Norfolk"},
["pij"] = {"Pijao"},
["pil"] = {"Yom"},
["pim"] = {"Powhatan"},
["pin"] = {"Piame"},
["pio"] = {"Piapoco"},
["pip"] = {"Pero"},
["pir"] = {"Piratapuyo"},
["pis"] = {"Pijin"},
["pit"] = {"Pitta Pitta"},
["piu"] = {"Pintupi-Luritja"},
["piv"] = {"Pileni", "Vaeakau-Taumako"},
["piw"] = {"Pimbwe"},
["pix"] = {"Piu"},
["piy"] = {"Piya-Kwonci"},
["piz"] = {"Pije"},
["pjt"] = {"Pitjantjatjara"},
["pka"] = {"Ardhamāgadhī Prākrit"},
["pkb"] = {"Pokomo", "Kipfokomo"},
["pkc"] = {"Paekche"},
["pkg"] = {"Pak-Tong"},
["pkh"] = {"Pankhu"},
["pkn"] = {"Pakanha"},
["pko"] = {"Pökoot"},
["pkp"] = {"Pukapuka"},
["pkr"] = {"Attapady Kurumba"},
["pks"] = {"Pakistan Sign Language"},
["pkt"] = {"Maleng"},
["pku"] = {"Paku"},
["pla"] = {"Miani"},
["plb"] = {"Polonombauk"},
["plc"] = {"Central Palawano"},
["pld"] = {"Polari"},
["ple"] = {"Palu'e"},
["plf"] = {"Central Malayo-Polynesian languages"},
["plg"] = {"Pilagá"},
["plh"] = {"Paulohi"},
["plk"] = {"Kohistani Shina"},
["pll"] = {"Shwe Palaung"},
["pln"] = {"Palenquero"},
["plo"] = {"Oluta Popoluca"},
["plq"] = {"Palaic"},
["plr"] = {"Palaka Senoufo"},
["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"},
["plt"] = {"Plateau Malagasy"},
["plu"] = {"Palikúr"},
["plv"] = {"Southwest Palawano"},
["plw"] = {"Brooke's Point Palawano"},
["ply"] = {"Bolyu"},
["plz"] = {"Paluan"},
["pma"] = {"Paama"},
["pmb"] = {"Pambia"},
["pmd"] = {"Pallanganmiddang"},
["pme"] = {"Pwaamei"},
["pmf"] = {"Pamona"},
["pmh"] = {"Māhārāṣṭri Prākrit"},
["pmi"] = {"Northern Pumi"},
["pmj"] = {"Southern Pumi"},
["pml"] = {"Lingua Franca"},
["pmm"] = {"Pomo"},
["pmn"] = {"Pam"},
["pmo"] = {"Pom"},
["pmq"] = {"Northern Pame"},
["pmr"] = {"Paynamar"},
["pms"] = {"Piemontese"},
["pmt"] = {"Tuamotuan"},
["pmw"] = {"Plains Miwok"},
["pmx"] = {"Poumei Naga"},
["pmy"] = {"Papuan Malay"},
["pmz"] = {"Southern Pame"},
["pna"] = {"Punan Bah-Biau"},
["pnb"] = {"Western Panjabi"},
["pnc"] = {"Pannei"},
["pnd"] = {"Mpinda"},
["pne"] = {"Western Penan"},
["png"] = {"Pangu", "Pongu"},
["pnh"] = {"Penrhyn"},
["pni"] = {"Aoheng"},
["pnj"] = {"Pinjarup"},
["pnk"] = {"Paunaka"},
["pnl"] = {"Paleni"},
["pnm"] = {"Punan Batu 1"},
["pnn"] = {"Pinai-Hagahai"},
["pno"] = {"Panobo"},
["pnp"] = {"Pancana"},
["pnq"] = {"Pana (Burkina Faso)"},
["pnr"] = {"Panim"},
["pns"] = {"Ponosakan"},
["pnt"] = {"Pontic"},
["pnu"] = {"Jiongnai Bunu"},
["pnv"] = {"Pinigura"},
["pnw"] = {"Banyjima", "Panytyima"},
["pnx"] = {"Phong-Kniang"},
["pny"] = {"Pinyin"},
["pnz"] = {"Pana (Central African Republic)"},
["poc"] = {"Poqomam"},
["poe"] = {"San Juan Atzingo Popoloca"},
["pof"] = {"Poke"},
["pog"] = {"Potiguára"},
["poh"] = {"Poqomchi'"},
["poi"] = {"Highland Popoluca"},
["pok"] = {"Pokangá"},
["pom"] = {"Southeastern Pomo"},
["pon"] = {"Pohnpeian"},
["poo"] = {"Central Pomo"},
["pop"] = {"Pwapwâ"},
["poq"] = {"Texistepec Popoluca"},
["pos"] = {"Sayula Popoluca"},
["pot"] = {"Potawatomi"},
["pov"] = {"Upper Guinea Crioulo"},
["pow"] = {"San Felipe Otlaltepec Popoloca"},
["pox"] = {"Polabian"},
["poy"] = {"Pogolo"},
["poz"] = {"Malayo-Polynesian languages"},
["ppe"] = {"Papi"},
["ppi"] = {"Paipai"},
["ppk"] = {"Uma"},
["ppl"] = {"Pipil", "Nicarao"},
["ppm"] = {"Papuma"},
["ppn"] = {"Papapana"},
["ppo"] = {"Folopa"},
["ppp"] = {"Pelende"},
["ppq"] = {"Pei"},
["pps"] = {"San Luís Temalacayuca Popoloca"},
["ppt"] = {"Pare"},
["ppu"] = {"Papora"},
["pqa"] = {"Pa'a"},
["pqe"] = {"Eastern Malayo-Polynesian languages"},
["pqm"] = {"Malecite-Passamaquoddy"},
["pqw"] = {"Western Malayo-Polynesian languages"},
["pra"] = {"Prakrit languages"},
["prc"] = {"Parachi"},
["prd"] = {"Parsi-Dari"},
["pre"] = {"Principense"},
["prf"] = {"Paranan"},
["prg"] = {"Prussian"},
["prh"] = {"Porohanon"},
["pri"] = {"Paicî"},
["prk"] = {"Parauk"},
["prl"] = {"Peruvian Sign Language"},
["prm"] = {"Kibiri"},
["prn"] = {"Prasuni"},
["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"},
["prq"] = {"Ashéninka Perené"},
["prr"] = {"Puri"},
["prs"] = {"Dari", "Afghan Persian"},
["prt"] = {"Phai"},
["pru"] = {"Puragi"},
["prw"] = {"Parawen"},
["prx"] = {"Purik"},
["prz"] = {"Providencia Sign Language"},
["psa"] = {"Asue Awyu"},
["psc"] = {"Iranian Sign Language", "Persian Sign Language"},
["psd"] = {"Plains Indian Sign Language"},
["pse"] = {"Central Malay"},
["psg"] = {"Penang Sign Language"},
["psh"] = {"Southwest Pashai", "Southwest Pashayi"},
["psi"] = {"Southeast Pashai", "Southeast Pashayi"},
["psl"] = {"Puerto Rican Sign Language"},
["psm"] = {"Pauserna"},
["psn"] = {"Panasuan"},
["pso"] = {"Polish Sign Language"},
["psp"] = {"Philippine Sign Language"},
["psq"] = {"Pasi"},
["psr"] = {"Portuguese Sign Language"},
["pss"] = {"Kaulong"},
["pst"] = {"Central Pashto"},
["psu"] = {"Sauraseni Prākrit"},
["psw"] = {"Port Sandwich"},
["psy"] = {"Piscataway"},
["pta"] = {"Pai Tavytera"},
["pth"] = {"Pataxó Hã-Ha-Hãe"},
["pti"] = {"Pindiini", "Wangkatha"},
["ptn"] = {"Patani"},
["pto"] = {"Zo'é"},
["ptp"] = {"Patep"},
["ptq"] = {"Pattapu"},
["ptr"] = {"Piamatsina"},
["ptt"] = {"Enrekang"},
["ptu"] = {"Bambam"},
["ptv"] = {"Port Vato"},
["ptw"] = {"Pentlatch"},
["pty"] = {"Pathiya"},
["pua"] = {"Western Highland Purepecha"},
["pub"] = {"Purum"},
["puc"] = {"Punan Merap"},
["pud"] = {"Punan Aput"},
["pue"] = {"Puelche"},
["puf"] = {"Punan Merah"},
["pug"] = {"Phuie"},
["pui"] = {"Puinave"},
["puj"] = {"Punan Tubu"},
["pum"] = {"Puma"},
["puo"] = {"Puoc"},
["pup"] = {"Pulabu"},
["puq"] = {"Puquina"},
["pur"] = {"Puruborá"},
["put"] = {"Putoh"},
["puu"] = {"Punu"},
["puw"] = {"Puluwatese"},
["pux"] = {"Puare"},
["puy"] = {"Purisimeño"},
["pwa"] = {"Pawaia"},
["pwb"] = {"Panawa"},
["pwg"] = {"Gapapaiwa"},
["pwi"] = {"Patwin"},
["pwm"] = {"Molbog"},
["pwn"] = {"Paiwan"},
["pwo"] = {"Pwo Western Karen"},
["pwr"] = {"Powari"},
["pww"] = {"Pwo Northern Karen"},
["pxm"] = {"Quetzaltepec Mixe"},
["pye"] = {"Pye Krumen"},
["pym"] = {"Fyam"},
["pyn"] = {"Poyanáwa"},
["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"},
["pyu"] = {"Puyuma"},
["pyx"] = {"Pyu (Myanmar)"},
["pyy"] = {"Pyen"},
["pze"] = {"Pesse"},
["pzh"] = {"Pazeh"},
["pzn"] = {"Jejara Naga", "Para Naga"},
["qua"] = {"Quapaw"},
["qub"] = {"Huallaga Huánuco Quechua"},
["quc"] = {"K'iche'", "Quiché"},
["qud"] = {"Calderón Highland Quichua"},
["quf"] = {"Lambayeque Quechua"},
["qug"] = {"Chimborazo Highland Quichua"},
["quh"] = {"South Bolivian Quechua"},
["qui"] = {"Quileute"},
["quk"] = {"Chachapoyas Quechua"},
["qul"] = {"North Bolivian Quechua"},
["qum"] = {"Sipacapense"},
["qun"] = {"Quinault"},
["qup"] = {"Southern Pastaza Quechua"},
["quq"] = {"Quinqui"},
["qur"] = {"Yanahuanca Pasco Quechua"},
["qus"] = {"Santiago del Estero Quichua"},
["quv"] = {"Sacapulteco"},
["quw"] = {"Tena Lowland Quichua"},
["qux"] = {"Yauyos Quechua"},
["quy"] = {"Ayacucho Quechua"},
["quz"] = {"Cusco Quechua"},
["qva"] = {"Ambo-Pasco Quechua"},
["qvc"] = {"Cajamarca Quechua"},
["qve"] = {"Eastern Apurímac Quechua"},
["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"},
["qvi"] = {"Imbabura Highland Quichua"},
["qvj"] = {"Loja Highland Quichua"},
["qvl"] = {"Cajatambo North Lima Quechua"},
["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"},
["qvn"] = {"North Junín Quechua"},
["qvo"] = {"Napo Lowland Quechua"},
["qvp"] = {"Pacaraos Quechua"},
["qvs"] = {"San Martín Quechua"},
["qvw"] = {"Huaylla Wanca Quechua"},
["qvy"] = {"Queyu"},
["qvz"] = {"Northern Pastaza Quichua"},
["qwa"] = {"Corongo Ancash Quechua"},
["qwc"] = {"Classical Quechua"},
["qwe"] = {"Quechuan (family)"},
["qwh"] = {"Huaylas Ancash Quechua"},
["qwm"] = {"Kuman (Russia)"},
["qws"] = {"Sihuas Ancash Quechua"},
["qwt"] = {"Kwalhioqua-Tlatskanai"},
["qxa"] = {"Chiquián Ancash Quechua"},
["qxc"] = {"Chincha Quechua"},
["qxh"] = {"Panao Huánuco Quechua"},
["qxl"] = {"Salasaca Highland Quichua"},
["qxn"] = {"Northern Conchucos Ancash Quechua"},
["qxo"] = {"Southern Conchucos Ancash Quechua"},
["qxp"] = {"Puno Quechua"},
["qxq"] = {"Qashqa'i"},
["qxr"] = {"Cañar Highland Quichua"},
["qxs"] = {"Southern Qiang"},
["qxt"] = {"Santa Ana de Tusi Pasco Quechua"},
["qxu"] = {"Arequipa-La Unión Quechua"},
["qxw"] = {"Jauja Wanca Quechua"},
["qya"] = {"Quenya"},
["qyp"] = {"Quiripi"},
["raa"] = {"Dungmali"},
["rab"] = {"Camling"},
["rac"] = {"Rasawa"},
["rad"] = {"Rade"},
["raf"] = {"Western Meohang"},
["rag"] = {"Logooli", "Lulogooli"},
["rah"] = {"Rabha"},
["rai"] = {"Ramoaaina"},
["raj"] = {"Rajasthani"},
["rak"] = {"Tulu-Bohuai"},
["ral"] = {"Ralte"},
["ram"] = {"Canela"},
["ran"] = {"Riantana"},
["rao"] = {"Rao"},
["rap"] = {"Rapanui"},
["raq"] = {"Saam"},
["rar"] = {"Rarotongan", "Cook Islands Maori"},
["ras"] = {"Tegali"},
["rat"] = {"Razajerdi"},
["rau"] = {"Raute"},
["rav"] = {"Sampang"},
["raw"] = {"Rawang"},
["rax"] = {"Rang"},
["ray"] = {"Rapa"},
["raz"] = {"Rahambuu"},
["rbb"] = {"Rumai Palaung"},
["rbk"] = {"Northern Bontok"},
["rbl"] = {"Miraya Bikol"},
["rbp"] = {"Barababaraba"},
["rcf"] = {"Réunion Creole French"},
["rdb"] = {"Rudbari"},
["rea"] = {"Rerau"},
["reb"] = {"Rembong"},
["ree"] = {"Rejang Kayan"},
["reg"] = {"Kara (Tanzania)"},
["rei"] = {"Reli"},
["rej"] = {"Rejang"},
["rel"] = {"Rendille"},
["rem"] = {"Remo"},
["ren"] = {"Rengao"},
["rer"] = {"Rer Bare"},
["res"] = {"Reshe"},
["ret"] = {"Retta"},
["rey"] = {"Reyesano"},
["rga"] = {"Roria"},
["rge"] = {"Romano-Greek"},
["rgk"] = {"Rangkas"},
["rgn"] = {"Romagnol"},
["rgr"] = {"Resígaro"},
["rgs"] = {"Southern Roglai"},
["rgu"] = {"Ringgou"},
["rhg"] = {"Rohingya"},
["rhp"] = {"Yahang"},
["ria"] = {"Riang (India)"},
["rib"] = {"Bribri Sign Language"},
["rif"] = {"Tarifit"},
["ril"] = {"Riang Lang", "Riang (Myanmar)"},
["rim"] = {"Nyaturu"},
["rin"] = {"Nungu"},
["rir"] = {"Ribun"},
["rit"] = {"Ritharrngu"},
["riu"] = {"Riung"},
["rjg"] = {"Rajong"},
["rji"] = {"Raji"},
["rjs"] = {"Rajbanshi"},
["rka"] = {"Kraol"},
["rkb"] = {"Rikbaktsa"},
["rkh"] = {"Rakahanga-Manihiki"},
["rki"] = {"Rakhine"},
["rkm"] = {"Marka"},
["rkt"] = {"Rangpuri", "Kamta"},
["rkw"] = {"Arakwal"},
["rma"] = {"Rama"},
["rmb"] = {"Rembarrnga"},
["rmc"] = {"Carpathian Romani"},
["rmd"] = {"Traveller Danish"},
["rme"] = {"Angloromani"},
["rmf"] = {"Kalo Finnish Romani"},
["rmg"] = {"Traveller Norwegian"},
["rmh"] = {"Murkim"},
["rmi"] = {"Lomavren"},
["rmk"] = {"Romkun"},
["rml"] = {"Baltic Romani"},
["rmm"] = {"Roma"},
["rmn"] = {"Balkan Romani"},
["rmo"] = {"Sinte Romani"},
["rmp"] = {"Rempi"},
["rmq"] = {"Caló"},
["rms"] = {"Romanian Sign Language"},
["rmt"] = {"Domari"},
["rmu"] = {"Tavringer Romani"},
["rmv"] = {"Romanova"},
["rmw"] = {"Welsh Romani"},
["rmx"] = {"Romam"},
["rmy"] = {"Vlax Romani"},
["rmz"] = {"Marma"},
["rnb"] = {"Brunca Sign Language"},
["rnd"] = {"Ruund"},
["rng"] = {"Ronga"},
["rnl"] = {"Ranglong"},
["rnn"] = {"Roon"},
["rnp"] = {"Rongpo"},
["rnr"] = {"Nari Nari"},
["rnw"] = {"Rungwa"},
["roa"] = {"Romance languages"},
["rob"] = {"Tae'"},
["roc"] = {"Cacgia Roglai"},
["rod"] = {"Rogo"},
["roe"] = {"Ronji"},
["rof"] = {"Rombo"},
["rog"] = {"Northern Roglai"},
["rol"] = {"Romblomanon"},
["rom"] = {"Romany"},
["roo"] = {"Rotokas"},
["rop"] = {"Kriol"},
["ror"] = {"Rongga"},
["rou"] = {"Runga"},
["row"] = {"Dela-Oenale"},
["rpn"] = {"Repanbitip"},
["rpt"] = {"Rapting"},
["rri"] = {"Ririo"},
["rro"] = {"Waima"},
["rrt"] = {"Arritinngithigh"},
["rsb"] = {"Romano-Serbian"},
["rsk"] = {"Ruthenian", "Rusnak"},
["rsl"] = {"Russian Sign Language"},
["rsm"] = {"Miriwoong Sign Language"},
["rsn"] = {"Rwandan Sign Language"},
["rsw"] = {"Rishiwa"},
["rtc"] = {"Rungtu Chin"},
["rth"] = {"Ratahan"},
["rtm"] = {"Rotuman"},
["rts"] = {"Yurats"},
["rtw"] = {"Rathawi"},
["rub"] = {"Gungu"},
["ruc"] = {"Ruuli"},
["rue"] = {"Rusyn"},
["ruf"] = {"Luguru"},
["rug"] = {"Roviana"},
["ruh"] = {"Ruga"},
["rui"] = {"Rufiji"},
["ruk"] = {"Che"},
["ruo"] = {"Istro Romanian"},
["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"},
["ruq"] = {"Megleno Romanian"},
["rut"] = {"Rutul"},
["ruu"] = {"Lanas Lobu"},
["ruy"] = {"Mala (Nigeria)"},
["ruz"] = {"Ruma"},
["rwa"] = {"Rawo"},
["rwk"] = {"Rwa"},
["rwl"] = {"Ruwila"},
["rwm"] = {"Amba (Uganda)"},
["rwo"] = {"Rawa"},
["rwr"] = {"Marwari (India)"},
["rxd"] = {"Ngardi"},
["rxw"] = {"Karuwali", "Garuwali"},
["ryn"] = {"Northern Amami-Oshima"},
["rys"] = {"Yaeyama"},
["ryu"] = {"Central Okinawan"},
["rzh"] = {"Rāziḥī"},
["saa"] = {"Saba"},
["sab"] = {"Buglere"},
["sac"] = {"Meskwaki"},
["sad"] = {"Sandawe"},
["sae"] = {"Sabanê"},
["saf"] = {"Safaliba"},
["sah"] = {"Yakut"},
["sai"] = {"South American Indian languages"},
["saj"] = {"Sahu"},
["sak"] = {"Sake"},
["sal"] = {"Salishan languages"},
["sam"] = {"Samaritan Aramaic"},
["sao"] = {"Sause"},
["saq"] = {"Samburu"},
["sar"] = {"Saraveca"},
["sas"] = {"Sasak"},
["sat"] = {"Santali"},
["sau"] = {"Saleman"},
["sav"] = {"Saafi-Saafi"},
["saw"] = {"Sawi"},
["sax"] = {"Sa"},
["say"] = {"Saya"},
["saz"] = {"Saurashtra"},
["sba"] = {"Ngambay"},
["sbb"] = {"Simbo"},
["sbc"] = {"Kele (Papua New Guinea)"},
["sbd"] = {"Southern Samo"},
["sbe"] = {"Saliba"},
["sbf"] = {"Chabu", "Shabo"},
["sbg"] = {"Seget"},
["sbh"] = {"Sori-Harengan"},
["sbi"] = {"Seti"},
["sbj"] = {"Surbakhal"},
["sbk"] = {"Safwa"},
["sbl"] = {"Botolan Sambal"},
["sbm"] = {"Sagala"},
["sbn"] = {"Sindhi Bhil"},
["sbo"] = {"Sabüm"},
["sbp"] = {"Sangu (Tanzania)"},
["sbq"] = {"Sileibi"},
["sbr"] = {"Sembakung Murut"},
["sbs"] = {"Subiya"},
["sbt"] = {"Kimki"},
["sbu"] = {"Stod Bhoti"},
["sbv"] = {"Sabine"},
["sbw"] = {"Simba"},
["sbx"] = {"Seberuang"},
["sby"] = {"Soli"},
["sbz"] = {"Sara Kaba"},
["scb"] = {"Chut"},
["sce"] = {"Dongxiang"},
["scf"] = {"San Miguel Creole French"},
["scg"] = {"Sanggau"},
["sch"] = {"Sakachep"},
["sci"] = {"Sri Lankan Creole Malay"},
["sck"] = {"Sadri"},
["scl"] = {"Shina"},
["scn"] = {"Sicilian"},
["sco"] = {"Scots"},
["scp"] = {"Hyolmo", "Helambu Sherpa"},
["scq"] = {"Sa'och"},
["scs"] = {"North Slavey"},
["sct"] = {"Southern Katang"},
["scu"] = {"Shumcho"},
["scv"] = {"Sheni"},
["scw"] = {"Sha"},
["scx"] = {"Sicel"},
["sda"] = {"Toraja-Sa'dan"},
["sdb"] = {"Shabak"},
["sdc"] = {"Sassarese Sardinian"},
["sde"] = {"Surubu"},
["sdf"] = {"Sarli"},
["sdg"] = {"Savi"},
["sdh"] = {"Southern Kurdish"},
["sdj"] = {"Suundi"},
["sdk"] = {"Sos Kundi"},
["sdl"] = {"Saudi Arabian Sign Language"},
["sdn"] = {"Gallurese Sardinian"},
["sdo"] = {"Bukar-Sadung Bidayuh"},
["sdp"] = {"Sherdukpen"},
["sdq"] = {"Semandang"},
["sdr"] = {"Oraon Sadri"},
["sds"] = {"Sened"},
["sdt"] = {"Shuadit"},
["sdu"] = {"Sarudu"},
["sdv"] = {"Eastern Sudanic languages"},
["sdx"] = {"Sibu Melanau"},
["sdz"] = {"Sallands"},
["sea"] = {"Semai"},
["seb"] = {"Shempire Senoufo"},
["sec"] = {"Sechelt"},
["sed"] = {"Sedang"},
["see"] = {"Seneca"},
["sef"] = {"Cebaara Senoufo"},
["seg"] = {"Segeju"},
["seh"] = {"Sena"},
["sei"] = {"Seri"},
["sej"] = {"Sene"},
["sek"] = {"Sekani"},
["sel"] = {"Selkup"},
["sem"] = {"Semitic languages"},
["sen"] = {"Nanerigé Sénoufo"},
["seo"] = {"Suarmin"},
["sep"] = {"Sìcìté Sénoufo"},
["seq"] = {"Senara Sénoufo"},
["ser"] = {"Serrano"},
["ses"] = {"Koyraboro Senni Songhai"},
["set"] = {"Sentani"},
["seu"] = {"Serui-Laut"},
["sev"] = {"Nyarafolo Senoufo"},
["sew"] = {"Sewa Bay"},
["sey"] = {"Secoya"},
["sez"] = {"Senthang Chin"},
["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"},
["sfe"] = {"Eastern Subanen"},
["sfm"] = {"Small Flowery Miao"},
["sfs"] = {"South African Sign Language"},
["sfw"] = {"Sehwi"},
["sga"] = {"Old Irish (to 900)"},
["sgb"] = {"Mag-antsi Ayta"},
["sgc"] = {"Kipsigis"},
["sgd"] = {"Surigaonon"},
["sge"] = {"Segai"},
["sgg"] = {"Swiss-German Sign Language"},
["sgh"] = {"Shughni"},
["sgi"] = {"Suga"},
["sgj"] = {"Surgujia"},
["sgk"] = {"Sangkong"},
["sgm"] = {"Singa"},
["sgn"] = {"Sign languages"},
["sgp"] = {"Singpho"},
["sgr"] = {"Sangisari"},
["sgs"] = {"Samogitian"},
["sgt"] = {"Brokpake"},
["sgu"] = {"Salas"},
["sgw"] = {"Sebat Bet Gurage"},
["sgx"] = {"Sierra Leone Sign Language"},
["sgy"] = {"Sanglechi"},
["sgz"] = {"Sursurunga"},
["sha"] = {"Shall-Zwall"},
["shb"] = {"Ninam"},
["shc"] = {"Sonde"},
["shd"] = {"Kundal Shahi"},
["she"] = {"Sheko"},
["shg"] = {"Shua"},
["shh"] = {"Shoshoni"},
["shi"] = {"Tachelhit"},
["shj"] = {"Shatt"},
["shk"] = {"Shilluk"},
["shl"] = {"Shendu"},
["shm"] = {"Shahrudi"},
["shn"] = {"Shan"},
["sho"] = {"Shanga"},
["shp"] = {"Shipibo-Conibo"},
["shq"] = {"Sala"},
["shr"] = {"Shi"},
["shs"] = {"Shuswap"},
["sht"] = {"Shasta"},
["shu"] = {"Chadian Arabic"},
["shv"] = {"Shehri"},
["shw"] = {"Shwai"},
["shx"] = {"She"},
["shy"] = {"Tachawit"},
["shz"] = {"Syenara Senoufo"},
["sia"] = {"Akkala Sami"},
["sib"] = {"Sebop"},
["sid"] = {"Sidamo"},
["sie"] = {"Simaa"},
["sif"] = {"Siamou"},
["sig"] = {"Paasaal"},
["sih"] = {"Zire", "Sîshëë"},
["sii"] = {"Shom Peng"},
["sij"] = {"Numbami"},
["sik"] = {"Sikiana"},
["sil"] = {"Tumulung Sisaala"},
["sim"] = {"Mende (Papua New Guinea)"},
["sio"] = {"Siouan languages"},
["sip"] = {"Sikkimese"},
["siq"] = {"Sonia"},
["sir"] = {"Siri"},
["sis"] = {"Siuslaw"},
["sit"] = {"Sino-Tibetan languages"},
["siu"] = {"Sinagen"},
["siv"] = {"Sumariup"},
["siw"] = {"Siwai"},
["six"] = {"Sumau"},
["siy"] = {"Sivandi"},
["siz"] = {"Siwi"},
["sja"] = {"Epena"},
["sjb"] = {"Sajau Basap"},
["sjd"] = {"Kildin Sami"},
["sje"] = {"Pite Sami"},
["sjg"] = {"Assangori"},
["sjk"] = {"Kemi Sami"},
["sjl"] = {"Sajalong", "Miji"},
["sjm"] = {"Mapun"},
["sjn"] = {"Sindarin"},
["sjo"] = {"Xibe"},
["sjp"] = {"Surjapuri"},
["sjr"] = {"Siar-Lak"},
["sjs"] = {"Senhaja De Srair"},
["sjt"] = {"Ter Sami"},
["sju"] = {"Ume Sami"},
["sjw"] = {"Shawnee"},
["ska"] = {"Skagit"},
["skb"] = {"Saek"},
["skc"] = {"Ma Manda"},
["skd"] = {"Southern Sierra Miwok"},
["ske"] = {"Seke (Vanuatu)"},
["skf"] = {"Sakirabiá"},
["skg"] = {"Sakalava Malagasy"},
["skh"] = {"Sikule"},
["ski"] = {"Sika"},
["skj"] = {"Seke (Nepal)"},
["skm"] = {"Kutong"},
["skn"] = {"Kolibugan Subanon"},
["sko"] = {"Seko Tengah"},
["skp"] = {"Sekapan"},
["skq"] = {"Sininkere"},
["skr"] = {"Saraiki", "Seraiki"},
["sks"] = {"Maia"},
["skt"] = {"Sakata"},
["sku"] = {"Sakao"},
["skv"] = {"Skou"},
["skw"] = {"Skepi Creole Dutch"},
["skx"] = {"Seko Padang"},
["sky"] = {"Sikaiana"},
["skz"] = {"Sekar"},
["sla"] = {"Slavic languages"},
["slc"] = {"Sáliba"},
["sld"] = {"Sissala"},
["sle"] = {"Sholaga"},
["slf"] = {"Swiss-Italian Sign Language"},
["slg"] = {"Selungai Murut"},
["slh"] = {"Southern Puget Sound Salish"},
["sli"] = {"Lower Silesian"},
["slj"] = {"Salumá"},
["sll"] = {"Salt-Yui"},
["slm"] = {"Pangutaran Sama"},
["sln"] = {"Salinan"},
["slp"] = {"Lamaholot"},
["slr"] = {"Salar"},
["sls"] = {"Singapore Sign Language"},
["slt"] = {"Sila"},
["slu"] = {"Selaru"},
["slw"] = {"Sialum"},
["slx"] = {"Salampasu"},
["sly"] = {"Selayar"},
["slz"] = {"Ma'ya"},
["sma"] = {"Southern Sami"},
["smb"] = {"Simbari"},
["smc"] = {"Som"},
["smf"] = {"Auwe"},
["smg"] = {"Simbali"},
["smh"] = {"Samei"},
["smi"] = {"Sami languages"},
["smj"] = {"Lule Sami"},
["smk"] = {"Bolinao"},
["sml"] = {"Central Sama"},
["smm"] = {"Musasa"},
["smn"] = {"Inari Sami"},
["smp"] = {"Samaritan"},
["smq"] = {"Samo"},
["smr"] = {"Simeulue"},
["sms"] = {"Skolt Sami"},
["smt"] = {"Simte"},
["smu"] = {"Somray"},
["smv"] = {"Samvedi"},
["smw"] = {"Sumbawa"},
["smx"] = {"Samba"},
["smy"] = {"Semnani"},
["smz"] = {"Simeku"},
["snc"] = {"Sinaugoro"},
["sne"] = {"Bau Bidayuh"},
["snf"] = {"Noon"},
["sng"] = {"Sanga (Democratic Republic of Congo)"},
["sni"] = {"Sensi"},
["snj"] = {"Riverain Sango"},
["snk"] = {"Soninke"},
["snl"] = {"Sangil"},
["snm"] = {"Southern Ma'di"},
["snn"] = {"Siona"},
["sno"] = {"Snohomish"},
["snp"] = {"Siane"},
["snq"] = {"Sangu (Gabon)"},
["snr"] = {"Sihan"},
["sns"] = {"South West Bay", "Nahavaq"},
["snu"] = {"Senggi", "Viid"},
["snv"] = {"Sa'ban"},
["snw"] = {"Selee"},
["snx"] = {"Sam"},
["sny"] = {"Saniyo-Hiyewe"},
["snz"] = {"Kou"},
["soa"] = {"Thai Song"},
["sob"] = {"Sobei"},
["soc"] = {"So (Democratic Republic of Congo)"},
["sod"] = {"Songoora"},
["soe"] = {"Songomeno"},
["sog"] = {"Sogdian"},
["soh"] = {"Aka"},
["soi"] = {"Sonha"},
["soj"] = {"Soi"},
["sok"] = {"Sokoro"},
["sol"] = {"Solos"},
["son"] = {"Songhai languages"},
["soo"] = {"Songo"},
["sop"] = {"Songe"},
["soq"] = {"Kanasi"},
["sor"] = {"Somrai"},
["sos"] = {"Seeku"},
["sou"] = {"Southern Thai"},
["sov"] = {"Sonsorol"},
["sow"] = {"Sowanda"},
["sox"] = {"Swo"},
["soy"] = {"Miyobe"},
["soz"] = {"Temi"},
["spb"] = {"Sepa (Indonesia)"},
["spc"] = {"Sapé"},
["spd"] = {"Saep"},
["spe"] = {"Sepa (Papua New Guinea)"},
["spg"] = {"Sian"},
["spi"] = {"Saponi"},
["spk"] = {"Sengo"},
["spl"] = {"Selepet"},
["spm"] = {"Akukem"},
["spn"] = {"Sanapaná"},
["spo"] = {"Spokane"},
["spp"] = {"Supyire Senoufo"},
["spq"] = {"Loreto-Ucayali Spanish"},
["spr"] = {"Saparua"},
["sps"] = {"Saposa"},
["spt"] = {"Spiti Bhoti"},
["spu"] = {"Sapuan"},
["spv"] = {"Sambalpuri", "Kosli"},
["spx"] = {"South Picene"},
["spy"] = {"Sabaot"},
["sqa"] = {"Shama-Sambuga"},
["sqh"] = {"Shau"},
["sqj"] = {"Albanian languages"},
["sqk"] = {"Albanian Sign Language"},
["sqm"] = {"Suma"},
["sqn"] = {"Susquehannock"},
["sqo"] = {"Sorkhei"},
["sqq"] = {"Sou"},
["sqr"] = {"Siculo Arabic"},
["sqs"] = {"Sri Lankan Sign Language"},
["sqt"] = {"Soqotri"},
["squ"] = {"Squamish"},
["sqx"] = {"Kufr Qassem Sign Language (KQSL)"},
["sra"] = {"Saruga"},
["srb"] = {"Sora"},
["src"] = {"Logudorese Sardinian"},
["sre"] = {"Sara"},
["srf"] = {"Nafi"},
["srg"] = {"Sulod"},
["srh"] = {"Sarikoli"},
["sri"] = {"Siriano"},
["srk"] = {"Serudung Murut"},
["srl"] = {"Isirawa"},
["srm"] = {"Saramaccan"},
["srn"] = {"Sranan Tongo"},
["sro"] = {"Campidanese Sardinian"},
["srq"] = {"Sirionó"},
["srr"] = {"Serer"},
["srs"] = {"Sarsi"},
["srt"] = {"Sauri"},
["sru"] = {"Suruí"},
["srv"] = {"Southern Sorsoganon"},
["srw"] = {"Serua"},
["srx"] = {"Sirmauri"},
["sry"] = {"Sera"},
["srz"] = {"Shahmirzadi"},
["ssa"] = {"Nilo-Saharan languages"},
["ssb"] = {"Southern Sama"},
["ssc"] = {"Suba-Simbiti"},
["ssd"] = {"Siroi"},
["sse"] = {"Balangingi", "Bangingih Sama"},
["ssf"] = {"Thao"},
["ssg"] = {"Seimat"},
["ssh"] = {"Shihhi Arabic"},
["ssi"] = {"Sansi"},
["ssj"] = {"Sausi"},
["ssk"] = {"Sunam"},
["ssl"] = {"Western Sisaala"},
["ssm"] = {"Semnam"},
["ssn"] = {"Waata"},
["sso"] = {"Sissano"},
["ssp"] = {"Spanish Sign Language"},
["ssq"] = {"So'a"},
["ssr"] = {"Swiss-French Sign Language"},
["sss"] = {"Sô"},
["sst"] = {"Sinasina"},
["ssu"] = {"Susuami"},
["ssv"] = {"Shark Bay"},
["ssx"] = {"Samberigi"},
["ssy"] = {"Saho"},
["ssz"] = {"Sengseng"},
["sta"] = {"Settla"},
["stb"] = {"Northern Subanen"},
["std"] = {"Sentinel"},
["ste"] = {"Liana-Seti"},
["stf"] = {"Seta"},
["stg"] = {"Trieng"},
["sth"] = {"Shelta"},
["sti"] = {"Bulo Stieng"},
["stj"] = {"Matya Samo"},
["stk"] = {"Arammba"},
["stl"] = {"Stellingwerfs"},
["stm"] = {"Setaman"},
["stn"] = {"Owa"},
["sto"] = {"Stoney"},
["stp"] = {"Southeastern Tepehuan"},
["stq"] = {"Saterfriesisch"},
["str"] = {"Straits Salish"},
["sts"] = {"Shumashti"},
["stt"] = {"Budeh Stieng"},
["stu"] = {"Samtao"},
["stv"] = {"Silt'e"},
["stw"] = {"Satawalese"},
["sty"] = {"Siberian Tatar"},
["sua"] = {"Sulka"},
["sub"] = {"Suku"},
["suc"] = {"Western Subanon"},
["sue"] = {"Suena"},
["sug"] = {"Suganga"},
["sui"] = {"Suki"},
["suj"] = {"Shubi"},
["suk"] = {"Sukuma"},
["suo"] = {"Bouni"},
["suq"] = {"Tirmaga-Chai Suri", "Suri"},
["sur"] = {"Mwaghavul"},
["sus"] = {"Susu"},
["sut"] = {"Subtiaba"},
["suv"] = {"Puroik"},
["suw"] = {"Sumbwa"},
["sux"] = {"Sumerian"},
["suy"] = {"Suyá"},
["suz"] = {"Sunwar"},
["sva"] = {"Svan"},
["svb"] = {"Ulau-Suain"},
["svc"] = {"Vincentian Creole English"},
["sve"] = {"Serili"},
["svk"] = {"Slovakian Sign Language"},
["svm"] = {"Slavomolisano"},
["svs"] = {"Savosavo"},
["svx"] = {"Skalvian"},
["swb"] = {"Maore Comorian"},
["swc"] = {"Congo Swahili"},
["swf"] = {"Sere"},
["swg"] = {"Swabian"},
["swh"] = {"Swahili (individual language)", "Kiswahili"},
["swi"] = {"Sui"},
["swj"] = {"Sira"},
["swk"] = {"Malawi Sena"},
["swl"] = {"Swedish Sign Language"},
["swm"] = {"Samosa"},
["swn"] = {"Sawknah"},
["swo"] = {"Shanenawa"},
["swp"] = {"Suau"},
["swq"] = {"Sharwa"},
["swr"] = {"Saweru"},
["sws"] = {"Seluwasan"},
["swt"] = {"Sawila"},
["swu"] = {"Suwawa"},
["swv"] = {"Shekhawati"},
["sww"] = {"Sowa"},
["swx"] = {"Suruahá"},
["swy"] = {"Sarua"},
["sxb"] = {"Suba"},
["sxc"] = {"Sicanian"},
["sxe"] = {"Sighu"},
["sxg"] = {"Shuhi", "Shixing"},
["sxk"] = {"Southern Kalapuya"},
["sxl"] = {"Selian"},
["sxm"] = {"Samre"},
["sxn"] = {"Sangir"},
["sxo"] = {"Sorothaptic"},
["sxr"] = {"Saaroa"},
["sxs"] = {"Sasaru"},
["sxu"] = {"Upper Saxon"},
["sxw"] = {"Saxwe Gbe"},
["sya"] = {"Siang"},
["syb"] = {"Central Subanen"},
["syc"] = {"Classical Syriac"},
["syd"] = {"Samoyedic languages"},
["syi"] = {"Seki"},
["syk"] = {"Sukur"},
["syl"] = {"Sylheti"},
["sym"] = {"Maya Samo"},
["syn"] = {"Senaya"},
["syo"] = {"Suoy"},
["syr"] = {"Syriac"},
["sys"] = {"Sinyar"},
["syw"] = {"Kagate"},
["syx"] = {"Samay"},
["syy"] = {"Al-Sayyid Bedouin Sign Language"},
["sza"] = {"Semelai"},
["szb"] = {"Ngalum"},
["szc"] = {"Semaq Beri"},
["sze"] = {"Seze"},
["szg"] = {"Sengele"},
["szl"] = {"Silesian"},
["szn"] = {"Sula"},
["szp"] = {"Suabo"},
["szs"] = {"Solomon Islands Sign Language"},
["szv"] = {"Isu (Fako Division)"},
["szw"] = {"Sawai"},
["szy"] = {"Sakizaya"},
["taa"] = {"Lower Tanana"},
["tab"] = {"Tabassaran"},
["tac"] = {"Lowland Tarahumara"},
["tad"] = {"Tause"},
["tae"] = {"Tariana"},
["taf"] = {"Tapirapé"},
["tag"] = {"Tagoi"},
["tai"] = {"Tai languages"},
["taj"] = {"Eastern Tamang"},
["tak"] = {"Tala"},
["tal"] = {"Tal"},
["tan"] = {"Tangale"},
["tao"] = {"Yami"},
["tap"] = {"Taabwa"},
["taq"] = {"Tamasheq"},
["tar"] = {"Central Tarahumara"},
["tas"] = {"Tay Boi"},
["tau"] = {"Upper Tanana"},
["tav"] = {"Tatuyo"},
["taw"] = {"Tai"},
["tax"] = {"Tamki"},
["tay"] = {"Atayal"},
["taz"] = {"Tocho"},
["tba"] = {"Aikanã"},
["tbc"] = {"Takia"},
["tbd"] = {"Kaki Ae"},
["tbe"] = {"Tanimbili"},
["tbf"] = {"Mandara"},
["tbg"] = {"North Tairora"},
["tbh"] = {"Dharawal", "Thurawal"},
["tbi"] = {"Gaam"},
["tbj"] = {"Tiang"},
["tbk"] = {"Calamian Tagbanwa"},
["tbl"] = {"Tboli"},
["tbm"] = {"Tagbu"},
["tbn"] = {"Barro Negro Tunebo"},
["tbo"] = {"Tawala"},
["tbp"] = {"Taworta", "Diebroud"},
["tbq"] = {"Tibeto-Burman languages"},
["tbr"] = {"Tumtum"},
["tbs"] = {"Tanguat"},
["tbt"] = {"Tembo (Kitembo)"},
["tbu"] = {"Tubar"},
["tbv"] = {"Tobo"},
["tbw"] = {"Tagbanwa"},
["tbx"] = {"Kapin"},
["tby"] = {"Tabaru"},
["tbz"] = {"Ditammari"},
["tca"] = {"Ticuna"},
["tcb"] = {"Tanacross"},
["tcc"] = {"Datooga"},
["tcd"] = {"Tafi"},
["tce"] = {"Southern Tutchone"},
["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"},
["tcg"] = {"Tamagario"},
["tch"] = {"Turks And Caicos Creole English"},
["tci"] = {"Wára"},
["tck"] = {"Tchitchege"},
["tcl"] = {"Taman (Myanmar)"},
["tcm"] = {"Tanahmerah"},
["tcn"] = {"Tichurong"},
["tco"] = {"Taungyo"},
["tcp"] = {"Tawr Chin"},
["tcq"] = {"Kaiy"},
["tcs"] = {"Torres Strait Creole", "Yumplatok"},
["tct"] = {"T'en"},
["tcu"] = {"Southeastern Tarahumara"},
["tcw"] = {"Tecpatlán Totonac"},
["tcx"] = {"Toda"},
["tcy"] = {"Tulu"},
["tcz"] = {"Thado Chin"},
["tda"] = {"Tagdal"},
["tdb"] = {"Panchpargania"},
["tdc"] = {"Emberá-Tadó"},
["tdd"] = {"Tai Nüa"},
["tde"] = {"Tiranige Diga Dogon"},
["tdf"] = {"Talieng"},
["tdg"] = {"Western Tamang"},
["tdh"] = {"Thulung"},
["tdi"] = {"Tomadino"},
["tdj"] = {"Tajio"},
["tdk"] = {"Tambas"},
["tdl"] = {"Sur"},
["tdm"] = {"Taruma"},
["tdn"] = {"Tondano"},
["tdo"] = {"Teme"},
["tdq"] = {"Tita"},
["tdr"] = {"Todrah"},
["tds"] = {"Doutai"},
["tdt"] = {"Tetun Dili"},
["tdv"] = {"Toro"},
["tdx"] = {"Tandroy-Mahafaly Malagasy"},
["tdy"] = {"Tadyawan"},
["tea"] = {"Temiar"},
["teb"] = {"Tetete"},
["tec"] = {"Terik"},
["ted"] = {"Tepo Krumen"},
["tee"] = {"Huehuetla Tepehua"},
["tef"] = {"Teressa"},
["teg"] = {"Teke-Tege"},
["teh"] = {"Tehuelche"},
["tei"] = {"Torricelli"},
["tek"] = {"Ibali Teke"},
["tem"] = {"Timne"},
["ten"] = {"Tama (Colombia)"},
["teo"] = {"Teso"},
["tep"] = {"Tepecano"},
["teq"] = {"Temein"},
["ter"] = {"Tereno"},
["tes"] = {"Tengger"},
["tet"] = {"Tetum"},
["teu"] = {"Soo"},
["tev"] = {"Teor"},
["tew"] = {"Tewa (USA)"},
["tex"] = {"Tennet"},
["tey"] = {"Tulishi"},
["tez"] = {"Tetserret"},
["tfi"] = {"Tofin Gbe"},
["tfn"] = {"Tanaina"},
["tfo"] = {"Tefaro"},
["tfr"] = {"Teribe"},
["tft"] = {"Ternate"},
["tga"] = {"Sagalla"},
["tgb"] = {"Tobilung"},
["tgc"] = {"Tigak"},
["tgd"] = {"Ciwogai"},
["tge"] = {"Eastern Gorkha Tamang"},
["tgf"] = {"Chalikha"},
["tgh"] = {"Tobagonian Creole English"},
["tgi"] = {"Lawunuia"},
["tgj"] = {"Tagin"},
["tgn"] = {"Tandaganon"},
["tgo"] = {"Sudest"},
["tgp"] = {"Tangoa"},
["tgq"] = {"Tring"},
["tgr"] = {"Tareng"},
["tgs"] = {"Nume"},
["tgt"] = {"Central Tagbanwa"},
["tgu"] = {"Tanggu"},
["tgv"] = {"Tingui-Boto"},
["tgw"] = {"Tagwana Senoufo"},
["tgx"] = {"Tagish"},
["tgy"] = {"Togoyo"},
["tgz"] = {"Tagalaka"},
["thd"] = {"Kuuk Thaayorre", "Thayore"},
["the"] = {"Chitwania Tharu"},
["thf"] = {"Thangmi"},
["thh"] = {"Northern Tarahumara"},
["thi"] = {"Tai Long"},
["thk"] = {"Tharaka", "Kitharaka"},
["thl"] = {"Dangaura Tharu"},
["thm"] = {"Aheu"},
["thn"] = {"Thachanadan"},
["thp"] = {"Thompson"},
["thq"] = {"Kochila Tharu"},
["thr"] = {"Rana Tharu"},
["ths"] = {"Thakali"},
["tht"] = {"Tahltan"},
["thu"] = {"Thuri"},
["thv"] = {"Tahaggart Tamahaq"},
["thy"] = {"Tha"},
["thz"] = {"Tayart Tamajeq"},
["tia"] = {"Tidikelt Tamazight"},
["tic"] = {"Tira"},
["tif"] = {"Tifal"},
["tig"] = {"Tigre"},
["tih"] = {"Timugon Murut"},
["tii"] = {"Tiene"},
["tij"] = {"Tilung"},
["tik"] = {"Tikar"},
["til"] = {"Tillamook"},
["tim"] = {"Timbe"},
["tin"] = {"Tindi"},
["tio"] = {"Teop"},
["tip"] = {"Trimuris"},
["tiq"] = {"Tiéfo"},
["tis"] = {"Masadiit Itneg"},
["tit"] = {"Tinigua"},
["tiu"] = {"Adasen"},
["tiv"] = {"Tiv"},
["tiw"] = {"Tiwi"},
["tix"] = {"Southern Tiwa"},
["tiy"] = {"Tiruray"},
["tiz"] = {"Tai Hongjin"},
["tja"] = {"Tajuasohn"},
["tjg"] = {"Tunjung"},
["tji"] = {"Northern Tujia"},
["tjj"] = {"Tjungundji"},
["tjl"] = {"Tai Laing"},
["tjm"] = {"Timucua"},
["tjn"] = {"Tonjon"},
["tjo"] = {"Temacine Tamazight"},
["tjp"] = {"Tjupany"},
["tjs"] = {"Southern Tujia"},
["tju"] = {"Tjurruru"},
["tjw"] = {"Djabwurrung"},
["tka"] = {"Truká"},
["tkb"] = {"Buksa"},
["tkd"] = {"Tukudede"},
["tke"] = {"Takwane"},
["tkf"] = {"Tukumanféd"},
["tkg"] = {"Tesaka Malagasy"},
["tkl"] = {"Tokelau"},
["tkm"] = {"Takelma"},
["tkn"] = {"Toku-No-Shima"},
["tkp"] = {"Tikopia"},
["tkq"] = {"Tee"},
["tkr"] = {"Tsakhur"},
["tks"] = {"Takestani"},
["tkt"] = {"Kathoriya Tharu"},
["tku"] = {"Upper Necaxa Totonac"},
["tkv"] = {"Mur Pano"},
["tkw"] = {"Teanu"},
["tkx"] = {"Tangko"},
["tkz"] = {"Takua"},
["tla"] = {"Southwestern Tepehuan"},
["tlb"] = {"Tobelo"},
["tlc"] = {"Yecuatla Totonac"},
["tld"] = {"Talaud"},
["tlf"] = {"Telefol"},
["tlg"] = {"Tofanma"},
["tlh"] = {"Klingon", "tlhIngan Hol"},
["tli"] = {"Tlingit"},
["tlj"] = {"Talinga-Bwisi"},
["tlk"] = {"Taloki"},
["tll"] = {"Tetela"},
["tlm"] = {"Tolomako"},
["tln"] = {"Talondo'"},
["tlo"] = {"Talodi"},
["tlp"] = {"Filomena Mata-Coahuitlán Totonac"},
["tlq"] = {"Tai Loi"},
["tlr"] = {"Talise"},
["tls"] = {"Tambotalo"},
["tlt"] = {"Sou Nama", "Teluti"},
["tlu"] = {"Tulehu"},
["tlv"] = {"Taliabu"},
["tlx"] = {"Khehek"},
["tly"] = {"Talysh"},
["tma"] = {"Tama (Chad)"},
["tmb"] = {"Katbol", "Avava"},
["tmc"] = {"Tumak"},
["tmd"] = {"Haruai"},
["tme"] = {"Tremembé"},
["tmf"] = {"Toba-Maskoy"},
["tmg"] = {"Ternateño"},
["tmh"] = {"Tamashek"},
["tmi"] = {"Tutuba"},
["tmj"] = {"Samarokena"},
["tml"] = {"Tamnim Citak"},
["tmm"] = {"Tai Thanh"},
["tmn"] = {"Taman (Indonesia)"},
["tmo"] = {"Temoq"},
["tmq"] = {"Tumleo"},
["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"},
["tms"] = {"Tima"},
["tmt"] = {"Tasmate"},
["tmu"] = {"Iau"},
["tmv"] = {"Tembo (Motembo)"},
["tmw"] = {"Temuan"},
["tmy"] = {"Tami"},
["tmz"] = {"Tamanaku"},
["tna"] = {"Tacana"},
["tnb"] = {"Western Tunebo"},
["tnc"] = {"Tanimuca-Retuarã"},
["tnd"] = {"Angosturas Tunebo"},
["tng"] = {"Tobanga"},
["tnh"] = {"Maiani"},
["tni"] = {"Tandia"},
["tnk"] = {"Kwamera"},
["tnl"] = {"Lenakel"},
["tnm"] = {"Tabla"},
["tnn"] = {"North Tanna"},
["tno"] = {"Toromono"},
["tnp"] = {"Whitesands"},
["tnq"] = {"Taino"},
["tnr"] = {"Ménik"},
["tns"] = {"Tenis"},
["tnt"] = {"Tontemboan"},
["tnu"] = {"Tay Khang"},
["tnv"] = {"Tangchangya"},
["tnw"] = {"Tonsawang"},
["tnx"] = {"Tanema"},
["tny"] = {"Tongwe"},
["tnz"] = {"Ten'edn"},
["tob"] = {"Toba"},
["toc"] = {"Coyutla Totonac"},
["tod"] = {"Toma"},
["tof"] = {"Gizrra"},
["tog"] = {"Tonga (Nyasa)"},
["toh"] = {"Gitonga"},
["toi"] = {"Tonga (Zambia)"},
["toj"] = {"Tojolabal"},
["tok"] = {"Toki Pona"},
["tol"] = {"Tolowa"},
["tom"] = {"Tombulu"},
["too"] = {"Xicotepec De Juárez Totonac"},
["top"] = {"Papantla Totonac"},
["toq"] = {"Toposa"},
["tor"] = {"Togbo-Vara Banda"},
["tos"] = {"Highland Totonac"},
["tou"] = {"Tho"},
["tov"] = {"Upper Taromi"},
["tow"] = {"Jemez"},
["tox"] = {"Tobian"},
["toy"] = {"Topoiyo"},
["toz"] = {"To"},
["tpa"] = {"Taupota"},
["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"},
["tpe"] = {"Tippera"},
["tpf"] = {"Tarpia"},
["tpg"] = {"Kula"},
["tpi"] = {"Tok Pisin"},
["tpj"] = {"Tapieté"},
["tpk"] = {"Tupinikin"},
["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"},
["tpm"] = {"Tampulma"},
["tpn"] = {"Tupinambá"},
["tpo"] = {"Tai Pao"},
["tpp"] = {"Pisaflores Tepehua"},
["tpq"] = {"Tukpa"},
["tpr"] = {"Tuparí"},
["tpt"] = {"Tlachichilco Tepehua"},
["tpu"] = {"Tampuan"},
["tpv"] = {"Tanapag"},
["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"},
["tpy"] = {"Trumai"},
["tpz"] = {"Tinputz"},
["tqb"] = {"Tembé"},
["tql"] = {"Lehali"},
["tqm"] = {"Turumsa"},
["tqn"] = {"Tenino"},
["tqo"] = {"Toaripi"},
["tqp"] = {"Tomoip"},
["tqq"] = {"Tunni"},
["tqr"] = {"Torona"},
["tqt"] = {"Western Totonac"},
["tqu"] = {"Touo"},
["tqw"] = {"Tonkawa"},
["tra"] = {"Tirahi"},
["trb"] = {"Terebu"},
["trc"] = {"Copala Triqui"},
["trd"] = {"Turi"},
["tre"] = {"East Tarangan"},
["trf"] = {"Trinidadian Creole English"},
["trg"] = {"Lishán Didán"},
["trh"] = {"Turaka"},
["tri"] = {"Trió"},
["trj"] = {"Toram"},
["trk"] = {"Turkic languages"},
["trl"] = {"Traveller Scottish"},
["trm"] = {"Tregami"},
["trn"] = {"Trinitario"},
["tro"] = {"Tarao Naga"},
["trp"] = {"Kok Borok"},
["trq"] = {"San Martín Itunyoso Triqui"},
["trr"] = {"Taushiro"},
["trs"] = {"Chicahuaxtla Triqui"},
["trt"] = {"Tunggare"},
["tru"] = {"Turoyo", "Surayt"},
["trv"] = {"Sediq", "Seediq", "Taroko"},
["trw"] = {"Torwali"},
["trx"] = {"Tringgus-Sembaan Bidayuh"},
["try"] = {"Turung"},
["trz"] = {"Torá"},
["tsa"] = {"Tsaangi"},
["tsb"] = {"Tsamai"},
["tsc"] = {"Tswa"},
["tsd"] = {"Tsakonian"},
["tse"] = {"Tunisian Sign Language"},
["tsg"] = {"Tausug"},
["tsh"] = {"Tsuvan"},
["tsi"] = {"Tsimshian"},
["tsj"] = {"Tshangla"},
["tsk"] = {"Tseku"},
["tsl"] = {"Ts'ün-Lao"},
["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"},
["tsp"] = {"Northern Toussian"},
["tsq"] = {"Thai Sign Language"},
["tsr"] = {"Akei"},
["tss"] = {"Taiwan Sign Language"},
["tst"] = {"Tondi Songway Kiini"},
["tsu"] = {"Tsou"},
["tsv"] = {"Tsogo"},
["tsw"] = {"Tsishingini"},
["tsx"] = {"Mubami"},
["tsy"] = {"Tebul Sign Language"},
["tsz"] = {"Purepecha"},
["tta"] = {"Tutelo"},
["ttb"] = {"Gaa"},
["ttc"] = {"Tektiteko"},
["ttd"] = {"Tauade"},
["tte"] = {"Bwanabwana"},
["ttf"] = {"Tuotomb"},
["ttg"] = {"Tutong"},
["tth"] = {"Upper Ta'oih"},
["tti"] = {"Tobati"},
["ttj"] = {"Tooro"},
["ttk"] = {"Totoro"},
["ttl"] = {"Totela"},
["ttm"] = {"Northern Tutchone"},
["ttn"] = {"Towei"},
["tto"] = {"Lower Ta'oih"},
["ttp"] = {"Tombelala"},
["ttq"] = {"Tawallammat Tamajaq"},
["ttr"] = {"Tera"},
["tts"] = {"Northeastern Thai"},
["ttt"] = {"Muslim Tat"},
["ttu"] = {"Torau"},
["ttv"] = {"Titan"},
["ttw"] = {"Long Wat"},
["tty"] = {"Sikaritai"},
["ttz"] = {"Tsum"},
["tua"] = {"Wiarumus"},
["tub"] = {"Tübatulabal"},
["tuc"] = {"Mutu"},
["tud"] = {"Tuxá"},
["tue"] = {"Tuyuca"},
["tuf"] = {"Central Tunebo"},
["tug"] = {"Tunia"},
["tuh"] = {"Taulil"},
["tui"] = {"Tupuri"},
["tuj"] = {"Tugutil"},
["tul"] = {"Tula"},
["tum"] = {"Tumbuka"},
["tun"] = {"Tunica"},
["tuo"] = {"Tucano"},
["tup"] = {"Tupi languages"},
["tuq"] = {"Tedaga"},
["tus"] = {"Tuscarora"},
["tut"] = {"Altaic languages"},
["tuu"] = {"Tututni"},
["tuv"] = {"Turkana"},
["tuw"] = {"Tungus languages"},
["tux"] = {"Tuxináwa"},
["tuy"] = {"Tugen"},
["tuz"] = {"Turka"},
["tva"] = {"Vaghua"},
["tvd"] = {"Tsuvadi"},
["tve"] = {"Te'un"},
["tvi"] = {"Tulai"},
["tvk"] = {"Southeast Ambrym"},
["tvl"] = {"Tuvalu"},
["tvm"] = {"Tela-Masbuar"},
["tvn"] = {"Tavoyan"},
["tvo"] = {"Tidore"},
["tvs"] = {"Taveta"},
["tvt"] = {"Tutsa Naga"},
["tvu"] = {"Tunen"},
["tvw"] = {"Sedoa"},
["tvx"] = {"Taivoan"},
["tvy"] = {"Timor Pidgin"},
["twa"] = {"Twana"},
["twb"] = {"Western Tawbuid"},
["twc"] = {"Teshenawa"},
["twd"] = {"Twents"},
["twe"] = {"Tewa (Indonesia)"},
["twf"] = {"Northern Tiwa"},
["twg"] = {"Tereweng"},
["twh"] = {"Tai Dón"},
["twl"] = {"Tawara"},
["twm"] = {"Tawang Monpa"},
["twn"] = {"Twendi"},
["two"] = {"Tswapong"},
["twp"] = {"Ere"},
["twq"] = {"Tasawaq"},
["twr"] = {"Southwestern Tarahumara"},
["twt"] = {"Turiwára"},
["twu"] = {"Termanu"},
["tww"] = {"Tuwari"},
["twx"] = {"Tewe"},
["twy"] = {"Tawoyan"},
["txa"] = {"Tombonuo"},
["txb"] = {"Tokharian B"},
["txc"] = {"Tsetsaut"},
["txe"] = {"Totoli"},
["txg"] = {"Tangut"},
["txh"] = {"Thracian"},
["txi"] = {"Ikpeng"},
["txj"] = {"Tarjumo"},
["txm"] = {"Tomini"},
["txn"] = {"West Tarangan"},
["txo"] = {"Toto"},
["txq"] = {"Tii"},
["txr"] = {"Tartessian"},
["txs"] = {"Tonsea"},
["txt"] = {"Citak"},
["txu"] = {"Kayapó"},
["txx"] = {"Tatana"},
["txy"] = {"Tanosy Malagasy"},
["tya"] = {"Tauya"},
["tye"] = {"Kyanga"},
["tyh"] = {"O'du"},
["tyi"] = {"Teke-Tsaayi"},
["tyj"] = {"Tai Do", "Tai Yo"},
["tyl"] = {"Thu Lao"},
["tyn"] = {"Kombai"},
["typ"] = {"Thaypan"},
["tyr"] = {"Tai Daeng"},
["tys"] = {"Tày Sa Pa"},
["tyt"] = {"Tày Tac"},
["tyu"] = {"Kua"},
["tyv"] = {"Tuvinian"},
["tyx"] = {"Teke-Tyee"},
["tyy"] = {"Tiyaa"},
["tyz"] = {"Tày"},
["tza"] = {"Tanzanian Sign Language"},
["tzh"] = {"Tzeltal"},
["tzj"] = {"Tz'utujil"},
["tzl"] = {"Talossan"},
["tzm"] = {"Central Atlas Tamazight"},
["tzn"] = {"Tugun"},
["tzo"] = {"Tzotzil"},
["tzx"] = {"Tabriak"},
["uam"] = {"Uamué"},
["uan"] = {"Kuan"},
["uar"] = {"Tairuma"},
["uba"] = {"Ubang"},
["ubi"] = {"Ubi"},
["ubl"] = {"Buhi'non Bikol"},
["ubr"] = {"Ubir"},
["ubu"] = {"Umbu-Ungu"},
["uby"] = {"Ubykh"},
["uda"] = {"Uda"},
["ude"] = {"Udihe"},
["udg"] = {"Muduga"},
["udi"] = {"Udi"},
["udj"] = {"Ujir"},
["udl"] = {"Wuzlam"},
["udm"] = {"Udmurt"},
["udu"] = {"Uduk"},
["ues"] = {"Kioko"},
["ufi"] = {"Ufim"},
["uga"] = {"Ugaritic"},
["ugb"] = {"Kuku-Ugbanh"},
["uge"] = {"Ughele"},
["ugh"] = {"Kubachi"},
["ugn"] = {"Ugandan Sign Language"},
["ugo"] = {"Ugong"},
["ugy"] = {"Uruguayan Sign Language"},
["uha"] = {"Uhami"},
["uhn"] = {"Damal"},
["uis"] = {"Uisai"},
["uiv"] = {"Iyive"},
["uji"] = {"Tanjijili"},
["uka"] = {"Kaburi"},
["ukg"] = {"Ukuriguma"},
["ukh"] = {"Ukhwejo"},
["uki"] = {"Kui (India)"},
["ukk"] = {"Muak Sa-aak"},
["ukl"] = {"Ukrainian Sign Language"},
["ukp"] = {"Ukpe-Bayobiri"},
["ukq"] = {"Ukwa"},
["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"},
["uku"] = {"Ukue"},
["ukv"] = {"Kuku"},
["ukw"] = {"Ukwuani-Aboh-Ndoni"},
["uky"] = {"Kuuk-Yak"},
["ula"] = {"Fungwa"},
["ulb"] = {"Ulukwumi"},
["ulc"] = {"Ulch"},
["ule"] = {"Lule"},
["ulf"] = {"Usku", "Afra"},
["uli"] = {"Ulithian"},
["ulk"] = {"Meriam Mir"},
["ull"] = {"Ullatan"},
["ulm"] = {"Ulumanda'"},
["uln"] = {"Unserdeutsch"},
["ulu"] = {"Uma' Lung"},
["ulw"] = {"Ulwa"},
["uly"] = {"Buli"},
["uma"] = {"Umatilla"},
["umb"] = {"Umbundu"},
["umc"] = {"Marrucinian"},
["umd"] = {"Umbindhamu"},
["umg"] = {"Morrobalama", "Umbuygamu"},
["umi"] = {"Ukit"},
["umm"] = {"Umon"},
["umn"] = {"Makyan Naga"},
["umo"] = {"Umotína"},
["ump"] = {"Umpila"},
["umr"] = {"Umbugarla"},
["ums"] = {"Pendau"},
["umu"] = {"Munsee"},
["una"] = {"North Watut"},
["und"] = {"Undetermined"},
["une"] = {"Uneme"},
["ung"] = {"Ngarinyin"},
["uni"] = {"Uni"},
["unk"] = {"Enawené-Nawé"},
["unm"] = {"Unami"},
["unn"] = {"Kurnai"},
["unr"] = {"Mundari"},
["unu"] = {"Unubahe"},
["unx"] = {"Munda"},
["unz"] = {"Unde Kaili"},
["uon"] = {"Kulon"},
["upi"] = {"Umeda"},
["upv"] = {"Uripiv-Wala-Rano-Atchin"},
["ura"] = {"Urarina"},
["urb"] = {"Urubú-Kaapor", "Kaapor"},
["urc"] = {"Urningangg"},
["ure"] = {"Uru"},
["urf"] = {"Uradhi"},
["urg"] = {"Urigina"},
["urh"] = {"Urhobo"},
["uri"] = {"Urim"},
["urj"] = {"Uralic languages"},
["urk"] = {"Urak Lawoi'"},
["url"] = {"Urali"},
["urm"] = {"Urapmin"},
["urn"] = {"Uruangnirin"},
["uro"] = {"Ura (Papua New Guinea)"},
["urp"] = {"Uru-Pa-In"},
["urr"] = {"Lehalurup", "Löyöp"},
["urt"] = {"Urat"},
["uru"] = {"Urumi"},
["urv"] = {"Uruava"},
["urw"] = {"Sop"},
["urx"] = {"Urimo"},
["ury"] = {"Orya"},
["urz"] = {"Uru-Eu-Wau-Wau"},
["usa"] = {"Usarufa"},
["ush"] = {"Ushojo"},
["usi"] = {"Usui"},
["usk"] = {"Usaghade"},
["usp"] = {"Uspanteco"},
["uss"] = {"us-Saare"},
["usu"] = {"Uya"},
["uta"] = {"Otank"},
["ute"] = {"Ute-Southern Paiute"},
["uth"] = {"ut-Hun"},
["utp"] = {"Amba (Solomon Islands)"},
["utr"] = {"Etulo"},
["utu"] = {"Utu"},
["uum"] = {"Urum"},
["uur"] = {"Ura (Vanuatu)"},
["uuu"] = {"U"},
["uve"] = {"West Uvean", "Fagauvea"},
["uvh"] = {"Uri"},
["uvl"] = {"Lote"},
["uwa"] = {"Kuku-Uwanh"},
["uya"] = {"Doko-Uyanga"},
["uzn"] = {"Northern Uzbek"},
["uzs"] = {"Southern Uzbek"},
["vaa"] = {"Vaagri Booli"},
["vae"] = {"Vale"},
["vaf"] = {"Vafsi"},
["vag"] = {"Vagla"},
["vah"] = {"Varhadi-Nagpuri"},
["vai"] = {"Vai"},
["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"},
["val"] = {"Vehes"},
["vam"] = {"Vanimo"},
["van"] = {"Valman"},
["vao"] = {"Vao"},
["vap"] = {"Vaiphei"},
["var"] = {"Huarijio"},
["vas"] = {"Vasavi"},
["vau"] = {"Vanuma"},
["vav"] = {"Varli"},
["vay"] = {"Wayu"},
["vbb"] = {"Southeast Babar"},
["vbk"] = {"Southwestern Bontok"},
["vec"] = {"Venetian"},
["ved"] = {"Veddah"},
["vel"] = {"Veluws"},
["vem"] = {"Vemgo-Mabas"},
["veo"] = {"Ventureño"},
["vep"] = {"Veps"},
["ver"] = {"Mom Jango"},
["vgr"] = {"Vaghri"},
["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"},
["vic"] = {"Virgin Islands Creole English"},
["vid"] = {"Vidunda"},
["vif"] = {"Vili"},
["vig"] = {"Viemo"},
["vil"] = {"Vilela"},
["vin"] = {"Vinza"},
["vis"] = {"Vishavan"},
["vit"] = {"Viti"},
["viv"] = {"Iduna"},
["vjk"] = {"Bajjika"},
["vka"] = {"Kariyarra"},
["vkj"] = {"Kujarge"},
["vkk"] = {"Kaur"},
["vkl"] = {"Kulisusu"},
["vkm"] = {"Kamakan"},
["vkn"] = {"Koro Nulu"},
["vko"] = {"Kodeoha"},
["vkp"] = {"Korlai Creole Portuguese"},
["vkt"] = {"Tenggarong Kutai Malay"},
["vku"] = {"Kurrama"},
["vkz"] = {"Koro Zuba"},
["vlp"] = {"Valpei"},
["vls"] = {"Vlaams"},
["vma"] = {"Martuyhunira"},
["vmb"] = {"Barbaram"},
["vmc"] = {"Juxtlahuaca Mixtec"},
["vmd"] = {"Mudu Koraga"},
["vme"] = {"East Masela"},
["vmf"] = {"Mainfränkisch"},
["vmg"] = {"Lungalunga"},
["vmh"] = {"Maraghei"},
["vmi"] = {"Miwa"},
["vmj"] = {"Ixtayutla Mixtec"},
["vmk"] = {"Makhuwa-Shirima"},
["vml"] = {"Malgana"},
["vmm"] = {"Mitlatongo Mixtec"},
["vmp"] = {"Soyaltepec Mazatec"},
["vmq"] = {"Soyaltepec Mixtec"},
["vmr"] = {"Marenje"},
["vms"] = {"Moksela"},
["vmu"] = {"Muluridyi"},
["vmv"] = {"Valley Maidu"},
["vmw"] = {"Makhuwa"},
["vmx"] = {"Tamazola Mixtec"},
["vmy"] = {"Ayautla Mazatec"},
["vmz"] = {"Mazatlán Mazatec"},
["vnk"] = {"Vano", "Lovono"},
["vnm"] = {"Vinmavis", "Neve'ei"},
["vnp"] = {"Vunapu"},
["vor"] = {"Voro"},
["vot"] = {"Votic"},
["vra"] = {"Vera'a"},
["vro"] = {"Võro"},
["vrs"] = {"Varisi"},
["vrt"] = {"Burmbar", "Banam Bay"},
["vsi"] = {"Moldova Sign Language"},
["vsl"] = {"Venezuelan Sign Language"},
["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"},
["vto"] = {"Vitou"},
["vum"] = {"Vumbu"},
["vun"] = {"Vunjo"},
["vut"] = {"Vute"},
["vwa"] = {"Awa (China)"},
["waa"] = {"Walla Walla"},
["wab"] = {"Wab"},
["wac"] = {"Wasco-Wishram"},
["wad"] = {"Wamesa", "Wondama"},
["wae"] = {"Walser"},
["waf"] = {"Wakoná"},
["wag"] = {"Wa'ema"},
["wah"] = {"Watubela"},
["wai"] = {"Wares"},
["waj"] = {"Waffa"},
["wak"] = {"Wakashan languages"},
["wal"] = {"Wolaytta", "Wolaitta"},
["wam"] = {"Wampanoag"},
["wan"] = {"Wan"},
["wao"] = {"Wappo"},
["wap"] = {"Wapishana"},
["waq"] = {"Wagiman"},
["war"] = {"Waray (Philippines)"},
["was"] = {"Washo"},
["wat"] = {"Kaninuwa"},
["wau"] = {"Waurá"},
["wav"] = {"Waka"},
["waw"] = {"Waiwai"},
["wax"] = {"Watam", "Marangis"},
["way"] = {"Wayana"},
["waz"] = {"Wampur"},
["wba"] = {"Warao"},
["wbb"] = {"Wabo"},
["wbe"] = {"Waritai"},
["wbf"] = {"Wara"},
["wbh"] = {"Wanda"},
["wbi"] = {"Vwanji"},
["wbj"] = {"Alagwa"},
["wbk"] = {"Waigali"},
["wbl"] = {"Wakhi"},
["wbm"] = {"Wa"},
["wbp"] = {"Warlpiri"},
["wbq"] = {"Waddar"},
["wbr"] = {"Wagdi"},
["wbs"] = {"West Bengal Sign Language"},
["wbt"] = {"Warnman"},
["wbv"] = {"Wajarri"},
["wbw"] = {"Woi"},
["wca"] = {"Yanomámi"},
["wci"] = {"Waci Gbe"},
["wdd"] = {"Wandji"},
["wdg"] = {"Wadaginam"},
["wdj"] = {"Wadjiginy"},
["wdk"] = {"Wadikali"},
["wdt"] = {"Wendat"},
["wdu"] = {"Wadjigu"},
["wdy"] = {"Wadjabangayi"},
["wea"] = {"Wewaw"},
["wec"] = {"Wè Western"},
["wed"] = {"Wedau"},
["weg"] = {"Wergaia"},
["weh"] = {"Weh"},
["wei"] = {"Kiunum"},
["wem"] = {"Weme Gbe"},
["wen"] = {"Sorbian languages"},
["weo"] = {"Wemale"},
["wep"] = {"Westphalien"},
["wer"] = {"Weri"},
["wes"] = {"Cameroon Pidgin"},
["wet"] = {"Perai"},
["weu"] = {"Rawngtu Chin"},
["wew"] = {"Wejewa"},
["wfg"] = {"Yafi", "Zorop"},
["wga"] = {"Wagaya"},
["wgb"] = {"Wagawaga"},
["wgg"] = {"Wangkangurru", "Wangganguru"},
["wgi"] = {"Wahgi"},
["wgo"] = {"Waigeo"},
["wgu"] = {"Wirangu"},
["wgy"] = {"Warrgamay"},
["wha"] = {"Sou Upaa", "Manusela"},
["whg"] = {"North Wahgi"},
["whk"] = {"Wahau Kenyah"},
["whu"] = {"Wahau Kayan"},
["wib"] = {"Southern Toussian"},
["wic"] = {"Wichita"},
["wie"] = {"Wik-Epa"},
["wif"] = {"Wik-Keyangan"},
["wig"] = {"Wik Ngathan"},
["wih"] = {"Wik-Me'anha"},
["wii"] = {"Minidien"},
["wij"] = {"Wik-Iiyanh"},
["wik"] = {"Wikalkan"},
["wil"] = {"Wilawila"},
["wim"] = {"Wik-Mungkan"},
["win"] = {"Ho-Chunk"},
["wir"] = {"Wiraféd"},
["wiu"] = {"Wiru"},
["wiv"] = {"Vitu"},
["wiy"] = {"Wiyot"},
["wja"] = {"Waja"},
["wji"] = {"Warji"},
["wka"] = {"Kw'adza"},
["wkb"] = {"Kumbaran"},
["wkd"] = {"Wakde", "Mo"},
["wkl"] = {"Kalanadi"},
["wkr"] = {"Keerray-Woorroong"},
["wku"] = {"Kunduvadi"},
["wkw"] = {"Wakawaka"},
["wky"] = {"Wangkayutyuru"},
["wla"] = {"Walio"},
["wlc"] = {"Mwali Comorian"},
["wle"] = {"Wolane"},
["wlg"] = {"Kunbarlang"},
["wlh"] = {"Welaun"},
["wli"] = {"Waioli"},
["wlk"] = {"Wailaki"},
["wll"] = {"Wali (Sudan)"},
["wlm"] = {"Middle Welsh"},
["wlo"] = {"Wolio"},
["wlr"] = {"Wailapa"},
["wls"] = {"Wallisian"},
["wlu"] = {"Wuliwuli"},
["wlv"] = {"Wichí Lhamtés Vejoz"},
["wlw"] = {"Walak"},
["wlx"] = {"Wali (Ghana)"},
["wly"] = {"Waling"},
["wma"] = {"Mawa (Nigeria)"},
["wmb"] = {"Wambaya"},
["wmc"] = {"Wamas"},
["wmd"] = {"Mamaindé"},
["wme"] = {"Wambule"},
["wmg"] = {"Western Minyag"},
["wmh"] = {"Waima'a"},
["wmi"] = {"Wamin"},
["wmm"] = {"Maiwa (Indonesia)"},
["wmn"] = {"Waamwang"},
["wmo"] = {"Wom (Papua New Guinea)"},
["wms"] = {"Wambon"},
["wmt"] = {"Walmajarri"},
["wmw"] = {"Mwani"},
["wmx"] = {"Womo"},
["wnb"] = {"Mokati"},
["wnc"] = {"Wantoat"},
["wnd"] = {"Wandarang"},
["wne"] = {"Waneci"},
["wng"] = {"Wanggom"},
["wni"] = {"Ndzwani Comorian"},
["wnk"] = {"Wanukaka"},
["wnm"] = {"Wanggamala"},
["wnn"] = {"Wunumara"},
["wno"] = {"Wano"},
["wnp"] = {"Wanap"},
["wnu"] = {"Usan"},
["wnw"] = {"Wintu"},
["wny"] = {"Wanyi", "Waanyi"},
["woa"] = {"Kuwema", "Tyaraity"},
["wob"] = {"Wè Northern"},
["woc"] = {"Wogeo"},
["wod"] = {"Wolani"},
["woe"] = {"Woleaian"},
["wof"] = {"Gambian Wolof"},
["wog"] = {"Wogamusin"},
["woi"] = {"Kamang"},
["wok"] = {"Longto"},
["wom"] = {"Wom (Nigeria)"},
["won"] = {"Wongo"},
["woo"] = {"Manombai"},
["wor"] = {"Woria"},
["wos"] = {"Hanga Hundi"},
["wow"] = {"Wawonii"},
["woy"] = {"Weyto"},
["wpc"] = {"Maco"},
["wrb"] = {"Waluwarra", "Warluwara"},
["wrg"] = {"Warungu", "Gudjal"},
["wrh"] = {"Wiradjuri"},
["wri"] = {"Wariyangga"},
["wrk"] = {"Garrwa"},
["wrl"] = {"Warlmanpa"},
["wrm"] = {"Warumungu"},
["wrn"] = {"Warnang"},
["wro"] = {"Worrorra"},
["wrp"] = {"Waropen"},
["wrr"] = {"Wardaman"},
["wrs"] = {"Waris"},
["wru"] = {"Waru"},
["wrv"] = {"Waruna"},
["wrw"] = {"Gugu Warra"},
["wrx"] = {"Wae Rana"},
["wry"] = {"Merwari"},
["wrz"] = {"Waray (Australia)"},
["wsa"] = {"Warembori"},
["wsg"] = {"Adilabad Gondi"},
["wsi"] = {"Wusi"},
["wsk"] = {"Waskia"},
["wsr"] = {"Owenia"},
["wss"] = {"Wasa"},
["wsu"] = {"Wasu"},
["wsv"] = {"Wotapuri-Katarqalai"},
["wtb"] = {"Matambwe"},
["wtf"] = {"Watiwa"},
["wth"] = {"Wathawurrung"},
["wti"] = {"Berta"},
["wtk"] = {"Watakataui"},
["wtm"] = {"Mewati"},
["wtw"] = {"Wotu"},
["wua"] = {"Wikngenchera"},
["wub"] = {"Wunambal"},
["wud"] = {"Wudu"},
["wuh"] = {"Wutunhua"},
["wul"] = {"Silimo"},
["wum"] = {"Wumbvu"},
["wun"] = {"Bungu"},
["wur"] = {"Wurrugu"},
["wut"] = {"Wutung"},
["wuu"] = {"Wu Chinese"},
["wuv"] = {"Wuvulu-Aua"},
["wux"] = {"Wulna"},
["wuy"] = {"Wauyai"},
["wwa"] = {"Waama"},
["wwb"] = {"Wakabunga"},
["wwo"] = {"Wetamut", "Dorig"},
["wwr"] = {"Warrwa"},
["www"] = {"Wawa"},
["wxa"] = {"Waxianghua"},
["wxw"] = {"Wardandi"},
["wyb"] = {"Wangaaybuwan-Ngiyambaa"},
["wyi"] = {"Woiwurrung"},
["wym"] = {"Wymysorys"},
["wyn"] = {"Wyandot"},
["wyr"] = {"Wayoró"},
["wyy"] = {"Western Fijian"},
["xaa"] = {"Andalusian Arabic"},
["xab"] = {"Sambe"},
["xac"] = {"Kachari"},
["xad"] = {"Adai"},
["xae"] = {"Aequian"},
["xag"] = {"Aghwan"},
["xai"] = {"Kaimbé"},
["xaj"] = {"Ararandewára"},
["xak"] = {"Máku"},
["xal"] = {"Kalmyk", "Oirat"},
["xam"] = {"ǀXam"},
["xan"] = {"Xamtanga"},
["xao"] = {"Khao"},
["xap"] = {"Apalachee"},
["xaq"] = {"Aquitanian"},
["xar"] = {"Karami"},
["xas"] = {"Kamas"},
["xat"] = {"Katawixi"},
["xau"] = {"Kauwera"},
["xav"] = {"Xavánte"},
["xaw"] = {"Kawaiisu"},
["xay"] = {"Kayan Mahakam"},
["xbb"] = {"Lower Burdekin"},
["xbc"] = {"Bactrian"},
["xbd"] = {"Bindal"},
["xbe"] = {"Bigambal"},
["xbg"] = {"Bunganditj"},
["xbi"] = {"Kombio"},
["xbj"] = {"Birrpayi"},
["xbm"] = {"Middle Breton"},
["xbn"] = {"Kenaboi"},
["xbo"] = {"Bolgarian"},
["xbp"] = {"Bibbulman"},
["xbr"] = {"Kambera"},
["xbw"] = {"Kambiwá"},
["xby"] = {"Batjala", "Batyala"},
["xcb"] = {"Cumbric"},
["xcc"] = {"Camunic"},
["xce"] = {"Celtiberian"},
["xcg"] = {"Cisalpine Gaulish"},
["xch"] = {"Chemakum", "Chimakum"},
["xcl"] = {"Classical Armenian"},
["xcm"] = {"Comecrudo"},
["xcn"] = {"Cotoname"},
["xco"] = {"Chorasmian"},
["xcr"] = {"Carian"},
["xct"] = {"Classical Tibetan"},
["xcu"] = {"Curonian"},
["xcv"] = {"Chuvantsy"},
["xcw"] = {"Coahuilteco"},
["xcy"] = {"Cayuse"},
["xda"] = {"Darkinyung"},
["xdc"] = {"Dacian"},
["xdk"] = {"Dharuk"},
["xdm"] = {"Edomite"},
["xdo"] = {"Kwandu"},
["xdq"] = {"Kaitag"},
["xdy"] = {"Malayic Dayak"},
["xeb"] = {"Eblan"},
["xed"] = {"Hdi"},
["xeg"] = {"ǁXegwi"},
["xel"] = {"Kelo"},
["xem"] = {"Kembayan"},
["xep"] = {"Epi-Olmec"},
["xer"] = {"Xerénte"},
["xes"] = {"Kesawai"},
["xet"] = {"Xetá"},
["xeu"] = {"Keoru-Ahia"},
["xfa"] = {"Faliscan"},
["xga"] = {"Galatian"},
["xgb"] = {"Gbin"},
["xgd"] = {"Gudang"},
["xgf"] = {"Gabrielino-Fernandeño"},
["xgg"] = {"Goreng"},
["xgi"] = {"Garingbal"},
["xgl"] = {"Galindan"},
["xgm"] = {"Dharumbal", "Guwinmal"},
["xgn"] = {"Mongolian languages"},
["xgr"] = {"Garza"},
["xgu"] = {"Unggumi"},
["xgw"] = {"Guwa"},
["xha"] = {"Harami"},
["xhc"] = {"Hunnic"},
["xhd"] = {"Hadrami"},
["xhe"] = {"Khetrani"},
["xhm"] = {"Middle Khmer (1400 to 1850 CE)"},
["xhr"] = {"Hernican"},
["xht"] = {"Hattic"},
["xhu"] = {"Hurrian"},
["xhv"] = {"Khua"},
["xib"] = {"Iberian"},
["xii"] = {"Xiri"},
["xil"] = {"Illyrian"},
["xin"] = {"Xinca"},
["xir"] = {"Xiriâna"},
["xis"] = {"Kisan"},
["xiv"] = {"Indus Valley Language"},
["xiy"] = {"Xipaya"},
["xjb"] = {"Minjungbal"},
["xjt"] = {"Jaitmatang"},
["xka"] = {"Kalkoti"},
["xkb"] = {"Northern Nago"},
["xkc"] = {"Kho'ini"},
["xkd"] = {"Mendalam Kayan"},
["xke"] = {"Kereho"},
["xkf"] = {"Khengkha"},
["xkg"] = {"Kagoro"},
["xki"] = {"Kenyan Sign Language"},
["xkj"] = {"Kajali"},
["xkk"] = {"Kachok", "Kaco'"},
["xkl"] = {"Mainstream Kenyah"},
["xkn"] = {"Kayan River Kayan"},
["xko"] = {"Kiorr"},
["xkp"] = {"Kabatei"},
["xkq"] = {"Koroni"},
["xkr"] = {"Xakriabá"},
["xks"] = {"Kumbewaha"},
["xkt"] = {"Kantosi"},
["xku"] = {"Kaamba"},
["xkv"] = {"Kgalagadi"},
["xkw"] = {"Kembra"},
["xkx"] = {"Karore"},
["xky"] = {"Uma' Lasan"},
["xkz"] = {"Kurtokha"},
["xla"] = {"Kamula"},
["xlb"] = {"Loup B"},
["xlc"] = {"Lycian"},
["xld"] = {"Lydian"},
["xle"] = {"Lemnian"},
["xlg"] = {"Ligurian (Ancient)"},
["xli"] = {"Liburnian"},
["xln"] = {"Alanic"},
["xlo"] = {"Loup A"},
["xlp"] = {"Lepontic"},
["xls"] = {"Lusitanian"},
["xlu"] = {"Cuneiform Luwian"},
["xly"] = {"Elymian"},
["xma"] = {"Mushungulu"},
["xmb"] = {"Mbonga"},
["xmc"] = {"Makhuwa-Marrevone"},
["xmd"] = {"Mbudum"},
["xme"] = {"Median"},
["xmf"] = {"Mingrelian"},
["xmg"] = {"Mengaka"},
["xmh"] = {"Kugu-Muminh"},
["xmj"] = {"Majera"},
["xmk"] = {"Ancient Macedonian"},
["xml"] = {"Malaysian Sign Language"},
["xmm"] = {"Manado Malay"},
["xmn"] = {"Manichaean Middle Persian"},
["xmo"] = {"Morerebi"},
["xmp"] = {"Kuku-Mu'inh"},
["xmq"] = {"Kuku-Mangk"},
["xmr"] = {"Meroitic"},
["xms"] = {"Moroccan Sign Language"},
["xmt"] = {"Matbat"},
["xmu"] = {"Kamu"},
["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"},
["xmw"] = {"Tsimihety Malagasy"},
["xmx"] = {"Salawati", "Maden"},
["xmy"] = {"Mayaguduna"},
["xmz"] = {"Mori Bawah"},
["xna"] = {"Ancient North Arabian"},
["xnb"] = {"Kanakanabu"},
["xnd"] = {"Na-Dene languages"},
["xng"] = {"Middle Mongolian"},
["xnh"] = {"Kuanhua"},
["xni"] = {"Ngarigu"},
["xnj"] = {"Ngoni (Tanzania)"},
["xnk"] = {"Nganakarti"},
["xnm"] = {"Ngumbarl"},
["xnn"] = {"Northern Kankanay"},
["xno"] = {"Anglo-Norman"},
["xnq"] = {"Ngoni (Mozambique)"},
["xnr"] = {"Kangri"},
["xns"] = {"Kanashi"},
["xnt"] = {"Narragansett"},
["xnu"] = {"Nukunul"},
["xny"] = {"Nyiyaparli"},
["xnz"] = {"Kenzi", "Mattoki"},
["xoc"] = {"O'chi'chi'"},
["xod"] = {"Kokoda"},
["xog"] = {"Soga"},
["xoi"] = {"Kominimung"},
["xok"] = {"Xokleng"},
["xom"] = {"Komo (Sudan)"},
["xon"] = {"Konkomba"},
["xoo"] = {"Xukurú"},
["xop"] = {"Kopar"},
["xor"] = {"Korubo"},
["xow"] = {"Kowaki"},
["xpa"] = {"Pirriya"},
["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"},
["xpc"] = {"Pecheneg"},
["xpd"] = {"Oyster Bay Tasmanian"},
["xpe"] = {"Liberia Kpelle"},
["xpf"] = {"Southeast Tasmanian", "Nuenonne"},
["xpg"] = {"Phrygian"},
["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"},
["xpi"] = {"Pictish"},
["xpj"] = {"Mpalitjanh"},
["xpk"] = {"Kulina Pano"},
["xpl"] = {"Port Sorell Tasmanian"},
["xpm"] = {"Pumpokol"},
["xpn"] = {"Kapinawá"},
["xpo"] = {"Pochutec"},
["xpp"] = {"Puyo-Paekche"},
["xpq"] = {"Mohegan-Pequot"},
["xpr"] = {"Parthian"},
["xps"] = {"Pisidian"},
["xpt"] = {"Punthamara"},
["xpu"] = {"Punic"},
["xpv"] = {"Northern Tasmanian", "Tommeginne"},
["xpw"] = {"Northwestern Tasmanian", "Peerapper"},
["xpx"] = {"Southwestern Tasmanian", "Toogee"},
["xpy"] = {"Puyo"},
["xpz"] = {"Bruny Island Tasmanian"},
["xqa"] = {"Karakhanid"},
["xqt"] = {"Qatabanian"},
["xra"] = {"Krahô"},
["xrb"] = {"Eastern Karaboro"},
["xrd"] = {"Gundungurra"},
["xre"] = {"Kreye"},
["xrg"] = {"Minang"},
["xri"] = {"Krikati-Timbira"},
["xrm"] = {"Armazic"},
["xrn"] = {"Arin"},
["xrr"] = {"Raetic"},
["xrt"] = {"Aranama-Tamique"},
["xru"] = {"Marriammu"},
["xrw"] = {"Karawa"},
["xsa"] = {"Sabaean"},
["xsb"] = {"Sambal"},
["xsc"] = {"Scythian"},
["xsd"] = {"Sidetic"},
["xse"] = {"Sempan"},
["xsh"] = {"Shamang"},
["xsi"] = {"Sio"},
["xsj"] = {"Subi"},
["xsl"] = {"South Slavey"},
["xsm"] = {"Kasem"},
["xsn"] = {"Sanga (Nigeria)"},
["xso"] = {"Solano"},
["xsp"] = {"Silopi"},
["xsq"] = {"Makhuwa-Saka"},
["xsr"] = {"Sherpa"},
["xsu"] = {"Sanumá"},
["xsv"] = {"Sudovian"},
["xsy"] = {"Saisiyat"},
["xta"] = {"Alcozauca Mixtec"},
["xtb"] = {"Chazumba Mixtec"},
["xtc"] = {"Katcha-Kadugli-Miri"},
["xtd"] = {"Diuxi-Tilantongo Mixtec"},
["xte"] = {"Ketengban"},
["xtg"] = {"Transalpine Gaulish"},
["xth"] = {"Yitha Yitha"},
["xti"] = {"Sinicahua Mixtec"},
["xtj"] = {"San Juan Teita Mixtec"},
["xtl"] = {"Tijaltepec Mixtec"},
["xtm"] = {"Magdalena Peñasco Mixtec"},
["xtn"] = {"Northern Tlaxiaco Mixtec"},
["xto"] = {"Tokharian A"},
["xtp"] = {"San Miguel Piedras Mixtec"},
["xtq"] = {"Tumshuqese"},
["xtr"] = {"Early Tripuri"},
["xts"] = {"Sindihui Mixtec"},
["xtt"] = {"Tacahua Mixtec"},
["xtu"] = {"Cuyamecalco Mixtec"},
["xtv"] = {"Thawa"},
["xtw"] = {"Tawandê"},
["xty"] = {"Yoloxochitl Mixtec"},
["xua"] = {"Alu Kurumba"},
["xub"] = {"Betta Kurumba"},
["xud"] = {"Umiida"},
["xug"] = {"Kunigami"},
["xuj"] = {"Jennu Kurumba"},
["xul"] = {"Ngunawal", "Nunukul"},
["xum"] = {"Umbrian"},
["xun"] = {"Unggaranggu"},
["xuo"] = {"Kuo"},
["xup"] = {"Upper Umpqua"},
["xur"] = {"Urartian"},
["xut"] = {"Kuthant"},
["xuu"] = {"Kxoe", "Khwedam"},
["xve"] = {"Venetic"},
["xvi"] = {"Kamviri"},
["xvn"] = {"Vandalic"},
["xvo"] = {"Volscian"},
["xvs"] = {"Vestinian"},
["xwa"] = {"Kwaza"},
["xwc"] = {"Woccon"},
["xwd"] = {"Wadi Wadi"},
["xwe"] = {"Xwela Gbe"},
["xwg"] = {"Kwegu"},
["xwj"] = {"Wajuk"},
["xwk"] = {"Wangkumara"},
["xwl"] = {"Western Xwla Gbe"},
["xwo"] = {"Written Oirat"},
["xwr"] = {"Kwerba Mamberamo"},
["xwt"] = {"Wotjobaluk"},
["xww"] = {"Wemba Wemba"},
["xxb"] = {"Boro (Ghana)"},
["xxk"] = {"Ke'o"},
["xxm"] = {"Minkin"},
["xxr"] = {"Koropó"},
["xxt"] = {"Tambora"},
["xya"] = {"Yaygir"},
["xyb"] = {"Yandjibara"},
["xyj"] = {"Mayi-Yapi"},
["xyk"] = {"Mayi-Kulan"},
["xyl"] = {"Yalakalore"},
["xyt"] = {"Mayi-Thakurti"},
["xyy"] = {"Yorta Yorta"},
["xzh"] = {"Zhang-Zhung"},
["xzm"] = {"Zemgalian"},
["xzp"] = {"Ancient Zapotec"},
["yaa"] = {"Yaminahua"},
["yab"] = {"Yuhup"},
["yac"] = {"Pass Valley Yali"},
["yad"] = {"Yagua"},
["yae"] = {"Pumé"},
["yaf"] = {"Yaka (Democratic Republic of Congo)"},
["yag"] = {"Yámana"},
["yah"] = {"Yazgulyam"},
["yai"] = {"Yagnobi"},
["yaj"] = {"Banda-Yangere"},
["yak"] = {"Yakama"},
["yal"] = {"Yalunka"},
["yam"] = {"Yamba"},
["yan"] = {"Mayangna"},
["yao"] = {"Yao"},
["yap"] = {"Yapese"},
["yaq"] = {"Yaqui"},
["yar"] = {"Yabarana"},
["yas"] = {"Nugunu (Cameroon)"},
["yat"] = {"Yambeta"},
["yau"] = {"Yuwana"},
["yav"] = {"Yangben"},
["yaw"] = {"Yawalapití"},
["yax"] = {"Yauma"},
["yay"] = {"Agwagwune"},
["yaz"] = {"Lokaa"},
["yba"] = {"Yala"},
["ybb"] = {"Yemba"},
["ybe"] = {"West Yugur"},
["ybh"] = {"Yakha"},
["ybi"] = {"Yamphu"},
["ybj"] = {"Hasha"},
["ybk"] = {"Bokha"},
["ybl"] = {"Yukuben"},
["ybm"] = {"Yaben"},
["ybn"] = {"Yabaâna"},
["ybo"] = {"Yabong"},
["ybx"] = {"Yawiyo"},
["yby"] = {"Yaweyuha"},
["ych"] = {"Chesu"},
["ycl"] = {"Lolopo"},
["ycn"] = {"Yucuna"},
["ycp"] = {"Chepya"},
["ycr"] = {"Yilan Creole"},
["yda"] = {"Yanda"},
["ydd"] = {"Eastern Yiddish"},
["yde"] = {"Yangum Dey"},
["ydg"] = {"Yidgha"},
["ydk"] = {"Yoidik"},
["yea"] = {"Ravula"},
["yec"] = {"Yeniche"},
["yee"] = {"Yimas"},
["yei"] = {"Yeni"},
["yej"] = {"Yevanic"},
["yel"] = {"Yela"},
["yer"] = {"Tarok"},
["yes"] = {"Nyankpa"},
["yet"] = {"Yetfa"},
["yeu"] = {"Yerukula"},
["yev"] = {"Yapunda"},
["yey"] = {"Yeyi"},
["yga"] = {"Malyangapa"},
["ygi"] = {"Yiningayi"},
["ygl"] = {"Yangum Gel"},
["ygm"] = {"Yagomi"},
["ygp"] = {"Gepo"},
["ygr"] = {"Yagaria"},
["ygs"] = {"Yolŋu Sign Language"},
["ygu"] = {"Yugul"},
["ygw"] = {"Yagwoia"},
["yha"] = {"Baha Buyang"},
["yhd"] = {"Judeo-Iraqi Arabic"},
["yhl"] = {"Hlepho Phowa"},
["yhs"] = {"Yan-nhaŋu Sign Language"},
["yia"] = {"Yinggarda"},
["yif"] = {"Ache"},
["yig"] = {"Wusa Nasu"},
["yih"] = {"Western Yiddish"},
["yii"] = {"Yidiny"},
["yij"] = {"Yindjibarndi"},
["yik"] = {"Dongshanba Lalo"},
["yil"] = {"Yindjilandji"},
["yim"] = {"Yimchungru Naga"},
["yin"] = {"Riang Lai", "Yinchia"},
["yip"] = {"Pholo"},
["yiq"] = {"Miqie"},
["yir"] = {"North Awyu"},
["yis"] = {"Yis"},
["yit"] = {"Eastern Lalu"},
["yiu"] = {"Awu"},
["yiv"] = {"Northern Nisu"},
["yix"] = {"Axi Yi"},
["yiz"] = {"Azhe"},
["yka"] = {"Yakan"},
["ykg"] = {"Northern Yukaghir"},
["ykh"] = {"Khamnigan Mongol"},
["yki"] = {"Yoke"},
["ykk"] = {"Yakaikeke"},
["ykl"] = {"Khlula"},
["ykm"] = {"Kap"},
["ykn"] = {"Kua-nsi"},
["yko"] = {"Yasa"},
["ykr"] = {"Yekora"},
["ykt"] = {"Kathu"},
["yku"] = {"Kuamasi"},
["yky"] = {"Yakoma"},
["yla"] = {"Yaul"},
["ylb"] = {"Yaleba"},
["yle"] = {"Yele"},
["ylg"] = {"Yelogu"},
["yli"] = {"Angguruk Yali"},
["yll"] = {"Yil"},
["ylm"] = {"Limi"},
["yln"] = {"Langnian Buyang"},
["ylo"] = {"Naluo Yi"},
["ylr"] = {"Yalarnnga"},
["ylu"] = {"Aribwaung"},
["yly"] = {"Nyâlayu", "Nyelâyu"},
["ymb"] = {"Yambes"},
["ymc"] = {"Southern Muji"},
["ymd"] = {"Muda"},
["yme"] = {"Yameo"},
["ymg"] = {"Yamongeri"},
["ymh"] = {"Mili"},
["ymi"] = {"Moji"},
["ymk"] = {"Makwe"},
["yml"] = {"Iamalele"},
["ymm"] = {"Maay"},
["ymn"] = {"Yamna", "Sunum"},
["ymo"] = {"Yangum Mon"},
["ymp"] = {"Yamap"},
["ymq"] = {"Qila Muji"},
["ymr"] = {"Malasar"},
["yms"] = {"Mysian"},
["ymx"] = {"Northern Muji"},
["ymz"] = {"Muzi"},
["yna"] = {"Aluo"},
["ynd"] = {"Yandruwandha"},
["yne"] = {"Lang'e"},
["yng"] = {"Yango"},
["ynk"] = {"Naukan Yupik"},
["ynl"] = {"Yangulam"},
["ynn"] = {"Yana"},
["yno"] = {"Yong"},
["ynq"] = {"Yendang"},
["yns"] = {"Yansi"},
["ynu"] = {"Yahuna"},
["yob"] = {"Yoba"},
["yog"] = {"Yogad"},
["yoi"] = {"Yonaguni"},
["yok"] = {"Yokuts"},
["yol"] = {"Yola"},
["yom"] = {"Yombe"},
["yon"] = {"Yongkom"},
["yot"] = {"Yotti"},
["yox"] = {"Yoron"},
["yoy"] = {"Yoy"},
["ypa"] = {"Phala"},
["ypb"] = {"Labo Phowa"},
["ypg"] = {"Phola"},
["yph"] = {"Phupha"},
["ypk"] = {"Yupik languages"},
["ypm"] = {"Phuma"},
["ypn"] = {"Ani Phowa"},
["ypo"] = {"Alo Phola"},
["ypp"] = {"Phupa"},
["ypz"] = {"Phuza"},
["yra"] = {"Yerakai"},
["yrb"] = {"Yareba"},
["yre"] = {"Yaouré"},
["yrk"] = {"Nenets"},
["yrl"] = {"Nhengatu"},
["yrm"] = {"Yirrk-Mel"},
["yrn"] = {"Yerong"},
["yro"] = {"Yaroamë"},
["yrs"] = {"Yarsun"},
["yrw"] = {"Yarawata"},
["yry"] = {"Yarluyandi"},
["ysc"] = {"Yassic"},
["ysd"] = {"Samatao"},
["ysg"] = {"Sonaga"},
["ysl"] = {"Yugoslavian Sign Language"},
["ysm"] = {"Myanmar Sign Language"},
["ysn"] = {"Sani"},
["yso"] = {"Nisi (China)"},
["ysp"] = {"Southern Lolopo"},
["ysr"] = {"Sirenik Yupik"},
["yss"] = {"Yessan-Mayo"},
["ysy"] = {"Sanie"},
["yta"] = {"Talu"},
["ytl"] = {"Tanglang"},
["ytp"] = {"Thopho"},
["ytw"] = {"Yout Wam"},
["yty"] = {"Yatay"},
["yua"] = {"Yucateco", "Yucatec Maya"},
["yub"] = {"Yugambal"},
["yuc"] = {"Yuchi"},
["yud"] = {"Judeo-Tripolitanian Arabic"},
["yue"] = {"Yue Chinese", "Cantonese"},
["yuf"] = {"Havasupai-Walapai-Yavapai"},
["yug"] = {"Yug"},
["yui"] = {"Yurutí"},
["yuj"] = {"Karkar-Yuri"},
["yuk"] = {"Yuki"},
["yul"] = {"Yulu"},
["yum"] = {"Quechan"},
["yun"] = {"Bena (Nigeria)"},
["yup"] = {"Yukpa"},
["yuq"] = {"Yuqui"},
["yur"] = {"Yurok"},
["yut"] = {"Yopno"},
["yuw"] = {"Yau (Morobe Province)"},
["yux"] = {"Southern Yukaghir"},
["yuy"] = {"East Yugur"},
["yuz"] = {"Yuracare"},
["yva"] = {"Yawa"},
["yvt"] = {"Yavitero"},
["ywa"] = {"Kalou"},
["ywg"] = {"Yinhawangka"},
["ywl"] = {"Western Lalu"},
["ywn"] = {"Yawanawa"},
["ywq"] = {"Wuding-Luquan Yi"},
["ywr"] = {"Yawuru"},
["ywt"] = {"Xishanba Lalo", "Central Lalo"},
["ywu"] = {"Wumeng Nasu"},
["yww"] = {"Yawarawarga"},
["yxa"] = {"Mayawali"},
["yxg"] = {"Yagara"},
["yxl"] = {"Yardliyawarra"},
["yxm"] = {"Yinwum"},
["yxu"] = {"Yuyu"},
["yxy"] = {"Yabula Yabula"},
["yyr"] = {"Yir Yoront"},
["yyu"] = {"Yau (Sandaun Province)"},
["yyz"] = {"Ayizi"},
["yzg"] = {"E'ma Buyang"},
["yzk"] = {"Zokhuo"},
["zaa"] = {"Sierra de Juárez Zapotec"},
["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"},
["zac"] = {"Ocotlán Zapotec"},
["zad"] = {"Cajonos Zapotec"},
["zae"] = {"Yareni Zapotec"},
["zaf"] = {"Ayoquesco Zapotec"},
["zag"] = {"Zaghawa"},
["zah"] = {"Zangwal"},
["zai"] = {"Isthmus Zapotec"},
["zaj"] = {"Zaramo"},
["zak"] = {"Zanaki"},
["zal"] = {"Zauzou"},
["zam"] = {"Miahuatlán Zapotec"},
["zao"] = {"Ozolotepec Zapotec"},
["zap"] = {"Zapotec"},
["zaq"] = {"Aloápam Zapotec"},
["zar"] = {"Rincón Zapotec"},
["zas"] = {"Santo Domingo Albarradas Zapotec"},
["zat"] = {"Tabaa Zapotec"},
["zau"] = {"Zangskari"},
["zav"] = {"Yatzachi Zapotec"},
["zaw"] = {"Mitla Zapotec"},
["zax"] = {"Xadani Zapotec"},
["zay"] = {"Zayse-Zergulla", "Zaysete"},
["zaz"] = {"Zari"},
["zba"] = {"Balaibalan"},
["zbc"] = {"Central Berawan"},
["zbe"] = {"East Berawan"},
["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"},
["zbt"] = {"Batui"},
["zbu"] = {"Bu (Bauchi State)"},
["zbw"] = {"West Berawan"},
["zca"] = {"Coatecas Altas Zapotec"},
["zcd"] = {"Las Delicias Zapotec"},
["zch"] = {"Central Hongshuihe Zhuang"},
["zdj"] = {"Ngazidja Comorian"},
["zea"] = {"Zeeuws"},
["zeg"] = {"Zenag"},
["zeh"] = {"Eastern Hongshuihe Zhuang"},
["zem"] = {"Zeem"},
["zen"] = {"Zenaga"},
["zga"] = {"Kinga"},
["zgb"] = {"Guibei Zhuang"},
["zgh"] = {"Standard Moroccan Tamazight"},
["zgm"] = {"Minz Zhuang"},
["zgn"] = {"Guibian Zhuang"},
["zgr"] = {"Magori"},
["zhb"] = {"Zhaba"},
["zhd"] = {"Dai Zhuang"},
["zhi"] = {"Zhire"},
["zhn"] = {"Nong Zhuang"},
["zhw"] = {"Zhoa"},
["zhx"] = {"Chinese (family)"},
["zia"] = {"Zia"},
["zib"] = {"Zimbabwe Sign Language"},
["zik"] = {"Zimakani"},
["zil"] = {"Zialo"},
["zim"] = {"Mesme"},
["zin"] = {"Zinza"},
["ziw"] = {"Zigula"},
["ziz"] = {"Zizilivakan"},
["zka"] = {"Kaimbulawa"},
["zkd"] = {"Kadu"},
["zkg"] = {"Koguryo"},
["zkh"] = {"Khorezmian"},
["zkk"] = {"Karankawa"},
["zkn"] = {"Kanan"},
["zko"] = {"Kott"},
["zkp"] = {"São Paulo Kaingáng"},
["zkr"] = {"Zakhring"},
["zkt"] = {"Kitan"},
["zku"] = {"Kaurna"},
["zkv"] = {"Krevinian"},
["zkz"] = {"Khazar"},
["zla"] = {"Zula"},
["zle"] = {"East Slavic languages"},
["zlj"] = {"Liujiang Zhuang"},
["zlm"] = {"Malay (individual language)"},
["zln"] = {"Lianshan Zhuang"},
["zlq"] = {"Liuqian Zhuang"},
["zls"] = {"South Slavic languages"},
["zlu"] = {"Zul"},
["zlw"] = {"West Slavic languages"},
["zma"] = {"Manda (Australia)"},
["zmb"] = {"Zimba"},
["zmc"] = {"Margany"},
["zmd"] = {"Maridan"},
["zme"] = {"Mangerr"},
["zmf"] = {"Mfinu"},
["zmg"] = {"Marti Ke"},
["zmh"] = {"Makolkol"},
["zmi"] = {"Negeri Sembilan Malay"},
["zmj"] = {"Maridjabin"},
["zmk"] = {"Mandandanyi"},
["zml"] = {"Matngala"},
["zmm"] = {"Marimanindji", "Marramaninyshi"},
["zmn"] = {"Mbangwe"},
["zmo"] = {"Molo"},
["zmp"] = {"Mpuono"},
["zmq"] = {"Mituku"},
["zmr"] = {"Maranunggu"},
["zms"] = {"Mbesa"},
["zmt"] = {"Maringarr"},
["zmu"] = {"Muruwari"},
["zmv"] = {"Mbariman-Gudhinma"},
["zmw"] = {"Mbo (Democratic Republic of Congo)"},
["zmx"] = {"Bomitaba"},
["zmy"] = {"Mariyedi"},
["zmz"] = {"Mbandja"},
["zna"] = {"Zan Gula"},
["znd"] = {"Zande languages"},
["zne"] = {"Zande (individual language)"},
["zng"] = {"Mang"},
["znk"] = {"Manangkari"},
["zns"] = {"Mangas"},
["zoc"] = {"Copainalá Zoque"},
["zoh"] = {"Chimalapa Zoque"},
["zom"] = {"Zou"},
["zoo"] = {"Asunción Mixtepec Zapotec"},
["zoq"] = {"Tabasco Zoque"},
["zor"] = {"Rayón Zoque"},
["zos"] = {"Francisco León Zoque"},
["zpa"] = {"Lachiguiri Zapotec"},
["zpb"] = {"Yautepec Zapotec"},
["zpc"] = {"Choapan Zapotec"},
["zpd"] = {"Southeastern Ixtlán Zapotec"},
["zpe"] = {"Petapa Zapotec"},
["zpf"] = {"San Pedro Quiatoni Zapotec"},
["zpg"] = {"Guevea De Humboldt Zapotec"},
["zph"] = {"Totomachapan Zapotec"},
["zpi"] = {"Santa María Quiegolani Zapotec"},
["zpj"] = {"Quiavicuzas Zapotec"},
["zpk"] = {"Tlacolulita Zapotec"},
["zpl"] = {"Lachixío Zapotec"},
["zpm"] = {"Mixtepec Zapotec"},
["zpn"] = {"Santa Inés Yatzechi Zapotec"},
["zpo"] = {"Amatlán Zapotec"},
["zpp"] = {"El Alto Zapotec"},
["zpq"] = {"Zoogocho Zapotec"},
["zpr"] = {"Santiago Xanica Zapotec"},
["zps"] = {"Coatlán Zapotec"},
["zpt"] = {"San Vicente Coatlán Zapotec"},
["zpu"] = {"Yalálag Zapotec"},
["zpv"] = {"Chichicapan Zapotec"},
["zpw"] = {"Zaniza Zapotec"},
["zpx"] = {"San Baltazar Loxicha Zapotec"},
["zpy"] = {"Mazaltepec Zapotec"},
["zpz"] = {"Texmelucan Zapotec"},
["zqe"] = {"Qiubei Zhuang"},
["zra"] = {"Kara (Korea)"},
["zrg"] = {"Mirgan"},
["zrn"] = {"Zerenkel"},
["zro"] = {"Záparo"},
["zrp"] = {"Zarphatic"},
["zrs"] = {"Mairasi"},
["zsa"] = {"Sarasira"},
["zsk"] = {"Kaskean"},
["zsl"] = {"Zambian Sign Language"},
["zsm"] = {"Standard Malay"},
["zsr"] = {"Southern Rincon Zapotec"},
["zsu"] = {"Sukurum"},
["zte"] = {"Elotepec Zapotec"},
["ztg"] = {"Xanaguía Zapotec"},
["ztl"] = {"Lapaguía-Guivini Zapotec"},
["ztm"] = {"San Agustín Mixtepec Zapotec"},
["ztn"] = {"Santa Catarina Albarradas Zapotec"},
["ztp"] = {"Loxicha Zapotec"},
["ztq"] = {"Quioquitani-Quierí Zapotec"},
["zts"] = {"Tilquiapan Zapotec"},
["ztt"] = {"Tejalapan Zapotec"},
["ztu"] = {"Güilá Zapotec"},
["ztx"] = {"Zaachila Zapotec"},
["zty"] = {"Yatee Zapotec"},
["zuh"] = {"Tokano"},
["zum"] = {"Kumzari"},
["zun"] = {"Zuni"},
["zuy"] = {"Zumaya"},
["zwa"] = {"Zay"},
["zxx"] = {"No linguistic content", "Not applicable"},
["zyb"] = {"Yongbei Zhuang"},
["zyg"] = {"Yang Zhuang"},
["zyj"] = {"Youjiang Zhuang"},
["zyn"] = {"Yongnan Zhuang"},
["zyp"] = {"Zyphe Chin"},
["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"},
["zzj"] = {"Zuojiang Zhuang"}
}
local deprecated = {
["in"] = {"Indonesian"},
["iw"] = {"Hebrew"},
["ji"] = {"Yiddish"},
["jw"] = {"Javanese"},
["mo"] = {"Moldavian", "Moldovan"},
["aam"] = {"Aramanik"},
["adp"] = {"Adap"},
["agp"] = {"Paranan"},
["ais"] = {"Nataoran Amis"},
["ajp"] = {"South Levantine Arabic"},
["ajt"] = {"Judeo-Tunisian Arabic"},
["aoh"] = {"Arma"},
["asd"] = {"Asas"},
["aue"] = {"ǂKxʼauǁʼein"},
["ayx"] = {"Ayi (China)"},
["ayy"] = {"Tayabas Ayta"},
["baz"] = {"Tunen"},
["bbz"] = {"Babalia Creole Arabic"},
["bgm"] = {"Baga Mboteni"},
["bhk"] = {"Albay Bicolano"},
["bic"] = {"Bikaru"},
["bij"] = {"Vaghat-Ya-Bijim-Legeri"},
["bjd"] = {"Bandjigali"},
["bjq"] = {"Southern Betsimisaraka Malagasy"},
["bkb"] = {"Finallig"},
["blg"] = {"Balau"},
["bmy"] = {"Bemba (Democratic Republic of Congo)"},
["bpb"] = {"Barbacoas"},
["btb"] = {"Beti (Cameroon)"},
["btl"] = {"Bhatola"},
["bxx"] = {"Borna (Democratic Republic of Congo)"},
["byy"] = {"Buya"},
["cbe"] = {"Chipiajes"},
["cbh"] = {"Cagua"},
["cca"] = {"Cauca"},
["ccq"] = {"Chaungtha"},
["cdg"] = {"Chamari"},
["cjr"] = {"Chorotega"},
["cka"] = {"Khumi Awa Chin"},
["cmk"] = {"Chimakum"},
["coy"] = {"Coyaima"},
["cqu"] = {"Chilean Quechua"},
["cug"] = {"Chungmboko", "Cung"},
["cum"] = {"Cumeral"},
["daf"] = {"Dan"},
["dap"] = {"Nisi (India)"},
["dgu"] = {"Degaru"},
["dha"] = {"Dhanwar (India)"},
["dit"] = {"Dirari"},
["djl"] = {"Djiwarli"},
["dkl"] = {"Kolum So Dogon"},
["drh"] = {"Darkhat"},
["drr"] = {"Dororo"},
["drw"] = {"Darwazi"},
["dud"] = {"Hun-Saare"},
["duj"] = {"Dhuwal"},
["dwl"] = {"Walo Kumbe Dogon"},
["ekc"] = {"Eastern Karnic"},
["elp"] = {"Elpaputih"},
["emo"] = {"Emok"},
["gav"] = {"Gabutamon"},
["gbc"] = {"Garawa"},
["gfx"] = {"Mangetti Dune ǃXung"},
["ggn"] = {"Eastern Gurung"},
["ggo"] = {"Southern Gondi"},
["ggr"] = {"Aghu Tharnggalu"},
["gio"] = {"Gelao"},
["gji"] = {"Geji"},
["gli"] = {"Guliguli"},
["gti"] = {"Gbati-ri"},
["guv"] = {"Gey"},
["hrr"] = {"Horuru"},
["iap"] = {"Iapama"},
["ibi"] = {"Ibilo"},
["ill"] = {"Iranun"},
["ilw"] = {"Talur"},
["ime"] = {"Imeraguen"},
["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"},
["jar"] = {"Jarawa (Nigeria)"},
["jeg"] = {"Jeng"},
["kbf"] = {"Kakauhua"},
["kdv"] = {"Kado"},
["kgc"] = {"Kasseng"},
["kgd"] = {"Kataang"},
["kgh"] = {"Upper Tanudan Kalinga"},
["kgm"] = {"Karipúna"},
["kjf"] = {"Khalaj [Indo-Iranian]"},
["koj"] = {"Sara Dunjo"},
["kox"] = {"Coxima"},
["kpp"] = {"Paku Karen"},
["krm"] = {"Krim"},
["ksa"] = {"Shuwa-Zamani"},
["ktr"] = {"Kota Marudu Tinagas"},
["kvs"] = {"Kunggara"},
["kwq"] = {"Kwak"},
["kxe"] = {"Kakihum"},
["kxl"] = {"Nepali Kurux"},
["kxu"] = {"Kui (India)"},
["kzh"] = {"Kenuzi-Dongola"},
["kzj"] = {"Coastal Kadazan"},
["kzt"] = {"Tambunan Dusun"},
["lak"] = {"Laka (Nigeria)"},
["lba"] = {"Lui"},
["leg"] = {"Lengua"},
["lii"] = {"Lingkhim"},
["llo"] = {"Khlor"},
["lmm"] = {"Lamam"},
["lmz"] = {"Lumbee"},
["lno"] = {"Lango (South Sudan)"},
["lsg"] = {"Lyons Sign Language"},
["meg"] = {"Mea"},
["mgx"] = {"Omati"},
["mhh"] = {"Maskoy Pidgin"},
["mja"] = {"Mahei"},
["mld"] = {"Malakhel"},
["mnt"] = {"Maykulan"},
["mof"] = {"Mohegan-Montauk-Narragansett"},
["mst"] = {"Cataelano Mandaya"},
["mvm"] = {"Muya"},
["mwd"] = {"Mudbura"},
["mwj"] = {"Maligo"},
["mwx"] = {"Mediak"},
["mwy"] = {"Mosiro"},
["myd"] = {"Maramba"},
["myi"] = {"Mina (India)"},
["myq"] = {"Forest Maninka"},
["myt"] = {"Sangab Mandaya"},
["nad"] = {"Nijadali"},
["nbf"] = {"Naxi"},
["nbx"] = {"Ngura"},
["ncp"] = {"Ndaktup"},
["ngo"] = {"Ngoni"},
["nln"] = {"Durango Nahuatl"},
["nlr"] = {"Ngarla"},
["nns"] = {"Ningye"},
["nnx"] = {"Ngong"},
["nom"] = {"Nocamán"},
["noo"] = {"Nootka"},
["nts"] = {"Natagaimas"},
["nxu"] = {"Narau"},
["ome"] = {"Omejes"},
["oun"] = {"ǃOǃung"},
["pat"] = {"Papitalai"},
["pbz"] = {"Palu"},
["pcr"] = {"Panang"},
["pgy"] = {"Pongyong"},
["pii"] = {"Pini"},
["plj"] = {"Polci"},
["plp"] = {"Palpa"},
["pmc"] = {"Palumata"},
["pmk"] = {"Pamlico"},
["pmu"] = {"Mirpur Panjabi"},
["pod"] = {"Ponares"},
["ppa"] = {"Pao"},
["ppr"] = {"Piru"},
["prb"] = {"Lua'"},
["prp"] = {"Parsi"},
["pry"] = {"Pray 3"},
["puk"] = {"Pu Ko"},
["puz"] = {"Purum Naga"},
["rie"] = {"Rien"},
["rmr"] = {"Caló"},
["rna"] = {"Runa"},
["rsi"] = {"Rennellese Sign Language"},
["sap"] = {"Sanapaná"},
["sca"] = {"Sansu"},
["sdm"] = {"Semandang"},
["sgl"] = {"Sanglechi-Ishkashimi"},
["sgo"] = {"Songa"},
["skk"] = {"Sok"},
["slq"] = {"Salchuq"},
["smd"] = {"Sama"},
["snb"] = {"Sebuyau"},
["snh"] = {"Shinabo"},
["sul"] = {"Surigaonon"},
["sum"] = {"Sumo-Mayangna"},
["svr"] = {"Savara"},
["szd"] = {"Seru"},
["tbb"] = {"Tapeba"},
["tdu"] = {"Tempasuk Dusun"},
["tgg"] = {"Tangga"},
["thc"] = {"Tai Hang Tong"},
["thw"] = {"Thudam"},
["thx"] = {"The"},
["tid"] = {"Tidong"},
["tie"] = {"Tingal"},
["tkk"] = {"Takpa"},
["tlw"] = {"South Wemale"},
["tmk"] = {"Northwestern Tamang"},
["tmp"] = {"Tai Mène"},
["tne"] = {"Tinoc Kallahan"},
["tnf"] = {"Tangshewi"},
["toe"] = {"Tomedes"},
["tpw"] = {"Tupí"},
["tsf"] = {"Southwestern Tamang"},
["unp"] = {"Worora"},
["uok"] = {"Uokha"},
["uun"] = {"Kulon-Pazeh"},
["vki"] = {"Ija-Zuba"},
["wgw"] = {"Wagawaga"},
["wit"] = {"Wintu"},
["wiw"] = {"Wirangu"},
["wra"] = {"Warapu"},
["wrd"] = {"Warduji"},
["wya"] = {"Wyandot"},
["xba"] = {"Kamba (Brazil)"},
["xbx"] = {"Kabixí"},
["xia"] = {"Xiandao"},
["xip"] = {"Xipináwa"},
["xkh"] = {"Karahawyana"},
["xrq"] = {"Karranga"},
["xss"] = {"Assan"},
["xtz"] = {"Tasmanian"},
["ybd"] = {"Yangbye"},
["yds"] = {"Yiddish Sign Language"},
["yen"] = {"Yendang"},
["yiy"] = {"Yir Yoront"},
["yma"] = {"Yamphe"},
["ymt"] = {"Mator-Taygi-Karagas"},
["ynh"] = {"Yangho"},
["yos"] = {"Yos"},
["yri"] = {"Yarí"},
["yuu"] = {"Yugh"},
["zir"] = {"Ziriya"},
["zkb"] = {"Koibal"},
["zua"] = {"Zeem"}
}
return {
active = active,
deprecated = deprecated,
}
90939c58de6a6d2fcd35fcf808d04acfa67bc8fd
Module:Language/data/iana scripts
828
241
706
2023-05-28T16:32:45Z
wikipedia>Trappist the monk
0
update to 2023-05-11 data;
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["Adlm"] = {"Adlam"},
["Afak"] = {"Afaka"},
["Aghb"] = {"Caucasian Albanian"},
["Ahom"] = {"Ahom", "Tai Ahom"},
["Arab"] = {"Arabic"},
["Aran"] = {"Arabic (Nastaliq variant)"},
["Armi"] = {"Imperial Aramaic"},
["Armn"] = {"Armenian"},
["Avst"] = {"Avestan"},
["Bali"] = {"Balinese"},
["Bamu"] = {"Bamum"},
["Bass"] = {"Bassa Vah"},
["Batk"] = {"Batak"},
["Beng"] = {"Bengali", "Bangla"},
["Bhks"] = {"Bhaiksuki"},
["Blis"] = {"Blissymbols"},
["Bopo"] = {"Bopomofo"},
["Brah"] = {"Brahmi"},
["Brai"] = {"Braille"},
["Bugi"] = {"Buginese"},
["Buhd"] = {"Buhid"},
["Cakm"] = {"Chakma"},
["Cans"] = {"Unified Canadian Aboriginal Syllabics"},
["Cari"] = {"Carian"},
["Cham"] = {"Cham"},
["Cher"] = {"Cherokee"},
["Chrs"] = {"Chorasmian"},
["Cirt"] = {"Cirth"},
["Copt"] = {"Coptic"},
["Cpmn"] = {"Cypro-Minoan"},
["Cprt"] = {"Cypriot syllabary"},
["Cyrl"] = {"Cyrillic"},
["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"},
["Deva"] = {"Devanagari", "Nagari"},
["Diak"] = {"Dives Akuru"},
["Dogr"] = {"Dogra"},
["Dsrt"] = {"Deseret", "Mormon"},
["Dupl"] = {"Duployan shorthand", "Duployan stenography"},
["Egyd"] = {"Egyptian demotic"},
["Egyh"] = {"Egyptian hieratic"},
["Egyp"] = {"Egyptian hieroglyphs"},
["Elba"] = {"Elbasan"},
["Elym"] = {"Elymaic"},
["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"},
["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"},
["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"},
["Glag"] = {"Glagolitic"},
["Gong"] = {"Gunjala Gondi"},
["Gonm"] = {"Masaram Gondi"},
["Goth"] = {"Gothic"},
["Gran"] = {"Grantha"},
["Grek"] = {"Greek"},
["Gujr"] = {"Gujarati"},
["Guru"] = {"Gurmukhi"},
["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"},
["Hang"] = {"Hangul", "Hangŭl", "Hangeul"},
["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"},
["Hano"] = {"Hanunoo", "Hanunóo"},
["Hans"] = {"Han (Simplified variant)"},
["Hant"] = {"Han (Traditional variant)"},
["Hatr"] = {"Hatran"},
["Hebr"] = {"Hebrew"},
["Hira"] = {"Hiragana"},
["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"},
["Hmng"] = {"Pahawh Hmong"},
["Hmnp"] = {"Nyiakeng Puachue Hmong"},
["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"},
["Hung"] = {"Old Hungarian", "Hungarian Runic"},
["Inds"] = {"Indus", "Harappan"},
["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"},
["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"},
["Java"] = {"Javanese"},
["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"},
["Jurc"] = {"Jurchen"},
["Kali"] = {"Kayah Li"},
["Kana"] = {"Katakana"},
["Kawi"] = {"Kawi"},
["Khar"] = {"Kharoshthi"},
["Khmr"] = {"Khmer"},
["Khoj"] = {"Khojki"},
["Kitl"] = {"Khitan large script"},
["Kits"] = {"Khitan small script"},
["Knda"] = {"Kannada"},
["Kore"] = {"Korean (alias for Hangul + Han)"},
["Kpel"] = {"Kpelle"},
["Kthi"] = {"Kaithi"},
["Lana"] = {"Tai Tham", "Lanna"},
["Laoo"] = {"Lao"},
["Latf"] = {"Latin (Fraktur variant)"},
["Latg"] = {"Latin (Gaelic variant)"},
["Latn"] = {"Latin"},
["Leke"] = {"Leke"},
["Lepc"] = {"Lepcha", "Róng"},
["Limb"] = {"Limbu"},
["Lina"] = {"Linear A"},
["Linb"] = {"Linear B"},
["Lisu"] = {"Lisu", "Fraser"},
["Loma"] = {"Loma"},
["Lyci"] = {"Lycian"},
["Lydi"] = {"Lydian"},
["Mahj"] = {"Mahajani"},
["Maka"] = {"Makasar"},
["Mand"] = {"Mandaic", "Mandaean"},
["Mani"] = {"Manichaean"},
["Marc"] = {"Marchen"},
["Maya"] = {"Mayan hieroglyphs"},
["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"},
["Mend"] = {"Mende Kikakui"},
["Merc"] = {"Meroitic Cursive"},
["Mero"] = {"Meroitic Hieroglyphs"},
["Mlym"] = {"Malayalam"},
["Modi"] = {"Modi", "Moḍī"},
["Mong"] = {"Mongolian"},
["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"},
["Mroo"] = {"Mro", "Mru"},
["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"},
["Mult"] = {"Multani"},
["Mymr"] = {"Myanmar", "Burmese"},
["Nagm"] = {"Nag Mundari"},
["Nand"] = {"Nandinagari"},
["Narb"] = {"Old North Arabian", "Ancient North Arabian"},
["Nbat"] = {"Nabataean"},
["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"},
["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"},
["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"},
["Nkoo"] = {"N’Ko", "N'Ko"},
["Nshu"] = {"Nüshu"},
["Ogam"] = {"Ogham"},
["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"},
["Orkh"] = {"Old Turkic", "Orkhon Runic"},
["Orya"] = {"Oriya", "Odia"},
["Osge"] = {"Osage"},
["Osma"] = {"Osmanya"},
["Ougr"] = {"Old Uyghur"},
["Palm"] = {"Palmyrene"},
["Pauc"] = {"Pau Cin Hau"},
["Pcun"] = {"Proto-Cuneiform"},
["Pelm"] = {"Proto-Elamite"},
["Perm"] = {"Old Permic"},
["Phag"] = {"Phags-pa"},
["Phli"] = {"Inscriptional Pahlavi"},
["Phlp"] = {"Psalter Pahlavi"},
["Phlv"] = {"Book Pahlavi"},
["Phnx"] = {"Phoenician"},
["Piqd"] = {"Klingon (KLI pIqaD)"},
["Plrd"] = {"Miao", "Pollard"},
["Prti"] = {"Inscriptional Parthian"},
["Psin"] = {"Proto-Sinaitic"},
["Ranj"] = {"Ranjana"},
["Rjng"] = {"Rejang", "Redjang", "Kaganga"},
["Rohg"] = {"Hanifi Rohingya"},
["Roro"] = {"Rongorongo"},
["Runr"] = {"Runic"},
["Samr"] = {"Samaritan"},
["Sara"] = {"Sarati"},
["Sarb"] = {"Old South Arabian"},
["Saur"] = {"Saurashtra"},
["Sgnw"] = {"SignWriting"},
["Shaw"] = {"Shavian", "Shaw"},
["Shrd"] = {"Sharada", "Śāradā"},
["Shui"] = {"Shuishu"},
["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"},
["Sind"] = {"Khudawadi", "Sindhi"},
["Sinh"] = {"Sinhala"},
["Sogd"] = {"Sogdian"},
["Sogo"] = {"Old Sogdian"},
["Sora"] = {"Sora Sompeng"},
["Soyo"] = {"Soyombo"},
["Sund"] = {"Sundanese"},
["Sunu"] = {"Sunuwar"},
["Sylo"] = {"Syloti Nagri"},
["Syrc"] = {"Syriac"},
["Syre"] = {"Syriac (Estrangelo variant)"},
["Syrj"] = {"Syriac (Western variant)"},
["Syrn"] = {"Syriac (Eastern variant)"},
["Tagb"] = {"Tagbanwa"},
["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"},
["Tale"] = {"Tai Le"},
["Talu"] = {"New Tai Lue"},
["Taml"] = {"Tamil"},
["Tang"] = {"Tangut"},
["Tavt"] = {"Tai Viet"},
["Telu"] = {"Telugu"},
["Teng"] = {"Tengwar"},
["Tfng"] = {"Tifinagh", "Berber"},
["Tglg"] = {"Tagalog", "Baybayin", "Alibata"},
["Thaa"] = {"Thaana"},
["Thai"] = {"Thai"},
["Tibt"] = {"Tibetan"},
["Tirh"] = {"Tirhuta"},
["Tnsa"] = {"Tangsa"},
["Toto"] = {"Toto"},
["Ugar"] = {"Ugaritic"},
["Vaii"] = {"Vai"},
["Visp"] = {"Visible Speech"},
["Vith"] = {"Vithkuqi"},
["Wara"] = {"Warang Citi", "Varang Kshiti"},
["Wcho"] = {"Wancho"},
["Wole"] = {"Woleai"},
["Xpeo"] = {"Old Persian"},
["Xsux"] = {"Sumero-Akkadian cuneiform"},
["Yezi"] = {"Yezidi"},
["Yiii"] = {"Yi"},
["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"},
["Zinh"] = {"Code for inherited script"},
["Zmth"] = {"Mathematical notation"},
["Zsye"] = {"Symbols (Emoji variant)"},
["Zsym"] = {"Symbols"},
["Zxxx"] = {"Code for unwritten documents"},
["Zyyy"] = {"Code for undetermined script"},
["Zzzz"] = {"Code for uncoded script"}
}
279ed2c472c8154d84ff2ea23c214e64c168d7e9
Module:Language/data/iana regions
828
242
708
2023-05-28T16:32:47Z
wikipedia>Trappist the monk
0
update to 2023-05-11 data;
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["AC"] = {"Ascension Island"},
["AD"] = {"Andorra"},
["AE"] = {"United Arab Emirates"},
["AF"] = {"Afghanistan"},
["AG"] = {"Antigua and Barbuda"},
["AI"] = {"Anguilla"},
["AL"] = {"Albania"},
["AM"] = {"Armenia"},
["AO"] = {"Angola"},
["AQ"] = {"Antarctica"},
["AR"] = {"Argentina"},
["AS"] = {"American Samoa"},
["AT"] = {"Austria"},
["AU"] = {"Australia"},
["AW"] = {"Aruba"},
["AX"] = {"Åland Islands"},
["AZ"] = {"Azerbaijan"},
["BA"] = {"Bosnia and Herzegovina"},
["BB"] = {"Barbados"},
["BD"] = {"Bangladesh"},
["BE"] = {"Belgium"},
["BF"] = {"Burkina Faso"},
["BG"] = {"Bulgaria"},
["BH"] = {"Bahrain"},
["BI"] = {"Burundi"},
["BJ"] = {"Benin"},
["BL"] = {"Saint Barthélemy"},
["BM"] = {"Bermuda"},
["BN"] = {"Brunei Darussalam"},
["BO"] = {"Bolivia"},
["BQ"] = {"Bonaire, Sint Eustatius and Saba"},
["BR"] = {"Brazil"},
["BS"] = {"Bahamas"},
["BT"] = {"Bhutan"},
["BV"] = {"Bouvet Island"},
["BW"] = {"Botswana"},
["BY"] = {"Belarus"},
["BZ"] = {"Belize"},
["CA"] = {"Canada"},
["CC"] = {"Cocos (Keeling) Islands"},
["CD"] = {"The Democratic Republic of the Congo"},
["CF"] = {"Central African Republic"},
["CG"] = {"Congo"},
["CH"] = {"Switzerland"},
["CI"] = {"Côte d'Ivoire"},
["CK"] = {"Cook Islands"},
["CL"] = {"Chile"},
["CM"] = {"Cameroon"},
["CN"] = {"China"},
["CO"] = {"Colombia"},
["CP"] = {"Clipperton Island"},
["CQ"] = {"Sark"},
["CR"] = {"Costa Rica"},
["CU"] = {"Cuba"},
["CV"] = {"Cabo Verde", "Cape Verde"},
["CW"] = {"Curaçao"},
["CX"] = {"Christmas Island"},
["CY"] = {"Cyprus"},
["CZ"] = {"Czechia", "Czech Republic"},
["DE"] = {"Germany"},
["DG"] = {"Diego Garcia"},
["DJ"] = {"Djibouti"},
["DK"] = {"Denmark"},
["DM"] = {"Dominica"},
["DO"] = {"Dominican Republic"},
["DZ"] = {"Algeria"},
["EA"] = {"Ceuta, Melilla"},
["EC"] = {"Ecuador"},
["EE"] = {"Estonia"},
["EG"] = {"Egypt"},
["EH"] = {"Western Sahara"},
["ER"] = {"Eritrea"},
["ES"] = {"Spain"},
["ET"] = {"Ethiopia"},
["EU"] = {"European Union"},
["EZ"] = {"Eurozone"},
["FI"] = {"Finland"},
["FJ"] = {"Fiji"},
["FK"] = {"Falkland Islands (Malvinas)"},
["FM"] = {"Federated States of Micronesia"},
["FO"] = {"Faroe Islands"},
["FR"] = {"France"},
["GA"] = {"Gabon"},
["GB"] = {"United Kingdom"},
["GD"] = {"Grenada"},
["GE"] = {"Georgia"},
["GF"] = {"French Guiana"},
["GG"] = {"Guernsey"},
["GH"] = {"Ghana"},
["GI"] = {"Gibraltar"},
["GL"] = {"Greenland"},
["GM"] = {"Gambia"},
["GN"] = {"Guinea"},
["GP"] = {"Guadeloupe"},
["GQ"] = {"Equatorial Guinea"},
["GR"] = {"Greece"},
["GS"] = {"South Georgia and the South Sandwich Islands"},
["GT"] = {"Guatemala"},
["GU"] = {"Guam"},
["GW"] = {"Guinea-Bissau"},
["GY"] = {"Guyana"},
["HK"] = {"Hong Kong"},
["HM"] = {"Heard Island and McDonald Islands"},
["HN"] = {"Honduras"},
["HR"] = {"Croatia"},
["HT"] = {"Haiti"},
["HU"] = {"Hungary"},
["IC"] = {"Canary Islands"},
["ID"] = {"Indonesia"},
["IE"] = {"Ireland"},
["IL"] = {"Israel"},
["IM"] = {"Isle of Man"},
["IN"] = {"India"},
["IO"] = {"British Indian Ocean Territory"},
["IQ"] = {"Iraq"},
["IR"] = {"Islamic Republic of Iran"},
["IS"] = {"Iceland"},
["IT"] = {"Italy"},
["JE"] = {"Jersey"},
["JM"] = {"Jamaica"},
["JO"] = {"Jordan"},
["JP"] = {"Japan"},
["KE"] = {"Kenya"},
["KG"] = {"Kyrgyzstan"},
["KH"] = {"Cambodia"},
["KI"] = {"Kiribati"},
["KM"] = {"Comoros"},
["KN"] = {"Saint Kitts and Nevis"},
["KP"] = {"Democratic People's Republic of Korea"},
["KR"] = {"Republic of Korea"},
["KW"] = {"Kuwait"},
["KY"] = {"Cayman Islands"},
["KZ"] = {"Kazakhstan"},
["LA"] = {"Lao People's Democratic Republic"},
["LB"] = {"Lebanon"},
["LC"] = {"Saint Lucia"},
["LI"] = {"Liechtenstein"},
["LK"] = {"Sri Lanka"},
["LR"] = {"Liberia"},
["LS"] = {"Lesotho"},
["LT"] = {"Lithuania"},
["LU"] = {"Luxembourg"},
["LV"] = {"Latvia"},
["LY"] = {"Libya"},
["MA"] = {"Morocco"},
["MC"] = {"Monaco"},
["MD"] = {"Moldova"},
["ME"] = {"Montenegro"},
["MF"] = {"Saint Martin (French part)"},
["MG"] = {"Madagascar"},
["MH"] = {"Marshall Islands"},
["MK"] = {"North Macedonia"},
["ML"] = {"Mali"},
["MM"] = {"Myanmar"},
["MN"] = {"Mongolia"},
["MO"] = {"Macao"},
["MP"] = {"Northern Mariana Islands"},
["MQ"] = {"Martinique"},
["MR"] = {"Mauritania"},
["MS"] = {"Montserrat"},
["MT"] = {"Malta"},
["MU"] = {"Mauritius"},
["MV"] = {"Maldives"},
["MW"] = {"Malawi"},
["MX"] = {"Mexico"},
["MY"] = {"Malaysia"},
["MZ"] = {"Mozambique"},
["NA"] = {"Namibia"},
["NC"] = {"New Caledonia"},
["NE"] = {"Niger"},
["NF"] = {"Norfolk Island"},
["NG"] = {"Nigeria"},
["NI"] = {"Nicaragua"},
["NL"] = {"Netherlands"},
["NO"] = {"Norway"},
["NP"] = {"Nepal"},
["NR"] = {"Nauru"},
["NU"] = {"Niue"},
["NZ"] = {"New Zealand"},
["OM"] = {"Oman"},
["PA"] = {"Panama"},
["PE"] = {"Peru"},
["PF"] = {"French Polynesia"},
["PG"] = {"Papua New Guinea"},
["PH"] = {"Philippines"},
["PK"] = {"Pakistan"},
["PL"] = {"Poland"},
["PM"] = {"Saint Pierre and Miquelon"},
["PN"] = {"Pitcairn"},
["PR"] = {"Puerto Rico"},
["PS"] = {"State of Palestine"},
["PT"] = {"Portugal"},
["PW"] = {"Palau"},
["PY"] = {"Paraguay"},
["QA"] = {"Qatar"},
["RE"] = {"Réunion"},
["RO"] = {"Romania"},
["RS"] = {"Serbia"},
["RU"] = {"Russian Federation"},
["RW"] = {"Rwanda"},
["SA"] = {"Saudi Arabia"},
["SB"] = {"Solomon Islands"},
["SC"] = {"Seychelles"},
["SD"] = {"Sudan"},
["SE"] = {"Sweden"},
["SG"] = {"Singapore"},
["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"},
["SI"] = {"Slovenia"},
["SJ"] = {"Svalbard and Jan Mayen"},
["SK"] = {"Slovakia"},
["SL"] = {"Sierra Leone"},
["SM"] = {"San Marino"},
["SN"] = {"Senegal"},
["SO"] = {"Somalia"},
["SR"] = {"Suriname"},
["SS"] = {"South Sudan"},
["ST"] = {"Sao Tome and Principe"},
["SV"] = {"El Salvador"},
["SX"] = {"Sint Maarten (Dutch part)"},
["SY"] = {"Syrian Arab Republic"},
["SZ"] = {"Eswatini", "eSwatini", "Swaziland"},
["TA"] = {"Tristan da Cunha"},
["TC"] = {"Turks and Caicos Islands"},
["TD"] = {"Chad"},
["TF"] = {"French Southern Territories"},
["TG"] = {"Togo"},
["TH"] = {"Thailand"},
["TJ"] = {"Tajikistan"},
["TK"] = {"Tokelau"},
["TL"] = {"Timor-Leste"},
["TM"] = {"Turkmenistan"},
["TN"] = {"Tunisia"},
["TO"] = {"Tonga"},
["TR"] = {"Türkiye", "Turkey"},
["TT"] = {"Trinidad and Tobago"},
["TV"] = {"Tuvalu"},
["TW"] = {"Taiwan, Province of China"},
["TZ"] = {"United Republic of Tanzania"},
["UA"] = {"Ukraine"},
["UG"] = {"Uganda"},
["UM"] = {"United States Minor Outlying Islands"},
["UN"] = {"United Nations"},
["US"] = {"United States"},
["UY"] = {"Uruguay"},
["UZ"] = {"Uzbekistan"},
["VA"] = {"Holy See (Vatican City State)"},
["VC"] = {"Saint Vincent and the Grenadines"},
["VE"] = {"Venezuela"},
["VG"] = {"British Virgin Islands"},
["VI"] = {"U.S. Virgin Islands"},
["VN"] = {"Viet Nam"},
["VU"] = {"Vanuatu"},
["WF"] = {"Wallis and Futuna"},
["WS"] = {"Samoa"},
["YE"] = {"Yemen"},
["YT"] = {"Mayotte"},
["ZA"] = {"South Africa"},
["ZM"] = {"Zambia"},
["ZW"] = {"Zimbabwe"},
["001"] = {"World"},
["002"] = {"Africa"},
["003"] = {"North America"},
["005"] = {"South America"},
["009"] = {"Oceania"},
["011"] = {"Western Africa"},
["013"] = {"Central America"},
["014"] = {"Eastern Africa"},
["015"] = {"Northern Africa"},
["017"] = {"Middle Africa"},
["018"] = {"Southern Africa"},
["019"] = {"Americas"},
["021"] = {"Northern America"},
["029"] = {"Caribbean"},
["030"] = {"Eastern Asia"},
["034"] = {"Southern Asia"},
["035"] = {"South-Eastern Asia"},
["039"] = {"Southern Europe"},
["053"] = {"Australia and New Zealand"},
["054"] = {"Melanesia"},
["057"] = {"Micronesia"},
["061"] = {"Polynesia"},
["142"] = {"Asia"},
["143"] = {"Central Asia"},
["145"] = {"Western Asia"},
["150"] = {"Europe"},
["151"] = {"Eastern Europe"},
["154"] = {"Northern Europe"},
["155"] = {"Western Europe"},
["202"] = {"Sub-Saharan Africa"},
["419"] = {"Latin America and the Caribbean"}
}
9b8ad87e9a14bff745205a082bcd25cbcd8713ee
Module:Language/data/iana variants
828
243
710
2023-05-28T16:32:49Z
wikipedia>Trappist the monk
0
update to 2023-05-11 data;
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["1606nict"] = {
["descriptions"] = {"Late Middle French (to 1606)"},
["prefixes"] = {"frm"},
},
["1694acad"] = {
["descriptions"] = {"Early Modern French"},
["prefixes"] = {"fr"},
},
["1901"] = {
["descriptions"] = {"Traditional German orthography"},
["prefixes"] = {"de"},
},
["1959acad"] = {
["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"},
["prefixes"] = {"be"},
},
["1994"] = {
["descriptions"] = {"Standardized Resian orthography"},
["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"},
},
["1996"] = {
["descriptions"] = {"German orthography of 1996"},
["prefixes"] = {"de"},
},
["abl1943"] = {
["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"},
["prefixes"] = {"pt-br"},
},
["akuapem"] = {
["descriptions"] = {"Akuapem Twi"},
["prefixes"] = {"tw"},
},
["alalc97"] = {
["descriptions"] = {"ALA-LC Romanization, 1997 edition"},
["prefixes"] = {},
},
["aluku"] = {
["descriptions"] = {"Aluku dialect", "Boni dialect"},
["prefixes"] = {"djk"},
},
["ao1990"] = {
["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"},
["prefixes"] = {"pt", "gl"},
},
["aranes"] = {
["descriptions"] = {"Aranese"},
["prefixes"] = {"oc"},
},
["arkaika"] = {
["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"},
["prefixes"] = {"eo"},
},
["asante"] = {
["descriptions"] = {"Asante Twi", "Ashanti Twi"},
["prefixes"] = {"tw"},
},
["auvern"] = {
["descriptions"] = {"Auvergnat"},
["prefixes"] = {"oc"},
},
["baku1926"] = {
["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"},
["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"},
},
["balanka"] = {
["descriptions"] = {"The Balanka dialect of Anii"},
["prefixes"] = {"blo"},
},
["barla"] = {
["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["basiceng"] = {
["descriptions"] = {"Basic English"},
["prefixes"] = {"en"},
},
["bauddha"] = {
["descriptions"] = {"Buddhist Hybrid Sanskrit"},
["prefixes"] = {"sa"},
},
["bciav"] = {
["descriptions"] = {"BCI Blissymbolics AV"},
["prefixes"] = {"zbl"},
},
["bcizbl"] = {
["descriptions"] = {"BCI Blissymbolics"},
["prefixes"] = {"zbl"},
},
["biscayan"] = {
["descriptions"] = {"Biscayan dialect of Basque"},
["prefixes"] = {"eu"},
},
["biske"] = {
["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["bohoric"] = {
["descriptions"] = {"Slovene in Bohorič alphabet"},
["prefixes"] = {"sl"},
},
["boont"] = {
["descriptions"] = {"Boontling"},
["prefixes"] = {"en"},
},
["bornholm"] = {
["descriptions"] = {"Bornholmsk"},
["prefixes"] = {"da"},
},
["cisaup"] = {
["descriptions"] = {"Cisalpine"},
["prefixes"] = {"oc"},
},
["colb1945"] = {
["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"},
["prefixes"] = {"pt"},
},
["cornu"] = {
["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"},
["prefixes"] = {"en"},
},
["creiss"] = {
["descriptions"] = {"Occitan variants of the Croissant area"},
["prefixes"] = {"oc"},
},
["dajnko"] = {
["descriptions"] = {"Slovene in Dajnko alphabet"},
["prefixes"] = {"sl"},
},
["ekavsk"] = {
["descriptions"] = {"Serbian with Ekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["emodeng"] = {
["descriptions"] = {"Early Modern English (1500-1700)"},
["prefixes"] = {"en"},
},
["fonipa"] = {
["descriptions"] = {"International Phonetic Alphabet"},
["prefixes"] = {},
},
["fonkirsh"] = {
["descriptions"] = {"Kirshenbaum Phonetic Alphabet"},
["prefixes"] = {},
},
["fonnapa"] = {
["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"},
["prefixes"] = {},
},
["fonupa"] = {
["descriptions"] = {"Uralic Phonetic Alphabet"},
["prefixes"] = {},
},
["fonxsamp"] = {
["descriptions"] = {"X-SAMPA transcription"},
["prefixes"] = {},
},
["gallo"] = {
["descriptions"] = {"Gallo"},
["prefixes"] = {"fr"},
},
["gascon"] = {
["descriptions"] = {"Gascon"},
["prefixes"] = {"oc"},
},
["grclass"] = {
["descriptions"] = {"Classical Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["grital"] = {
["descriptions"] = {"Italian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"},
},
["grmistr"] = {
["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["hepburn"] = {
["descriptions"] = {"Hepburn romanization"},
["prefixes"] = {"ja-latn"},
},
["hognorsk"] = {
["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"},
["prefixes"] = {"nn"},
},
["hsistemo"] = {
["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
},
["ijekavsk"] = {
["descriptions"] = {"Serbian with Ijekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["itihasa"] = {
["descriptions"] = {"Epic Sanskrit"},
["prefixes"] = {"sa"},
},
["ivanchov"] = {
["descriptions"] = {"Bulgarian in 1899 orthography"},
["prefixes"] = {"bg"},
},
["jauer"] = {
["descriptions"] = {"Jauer dialect of Romansh"},
["prefixes"] = {"rm"},
},
["jyutping"] = {
["descriptions"] = {"Jyutping Cantonese Romanization"},
["prefixes"] = {"yue"},
},
["kkcor"] = {
["descriptions"] = {"Common Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["kociewie"] = {
["descriptions"] = {"The Kociewie dialect of Polish"},
["prefixes"] = {"pl"},
},
["kscor"] = {
["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"},
["prefixes"] = {"kw"},
},
["laukika"] = {
["descriptions"] = {"Classical Sanskrit"},
["prefixes"] = {"sa"},
},
["lemosin"] = {
["descriptions"] = {"Limousin"},
["prefixes"] = {"oc"},
},
["lengadoc"] = {
["descriptions"] = {"Languedocien"},
["prefixes"] = {"oc"},
},
["lipaw"] = {
["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["ltg1929"] = {
["descriptions"] = {"The Latgalian language orthography codified in 1929"},
["prefixes"] = {"ltg"},
},
["ltg2007"] = {
["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"},
["prefixes"] = {"ltg"},
},
["luna1918"] = {
["descriptions"] = {"Post-1917 Russian orthography"},
["prefixes"] = {"ru"},
},
["metelko"] = {
["descriptions"] = {"Slovene in Metelko alphabet"},
["prefixes"] = {"sl"},
},
["monoton"] = {
["descriptions"] = {"Monotonic Greek"},
["prefixes"] = {"el"},
},
["ndyuka"] = {
["descriptions"] = {"Ndyuka dialect", "Aukan dialect"},
["prefixes"] = {"djk"},
},
["nedis"] = {
["descriptions"] = {"Natisone dialect", "Nadiza dialect"},
["prefixes"] = {"sl"},
},
["newfound"] = {
["descriptions"] = {"Newfoundland English"},
["prefixes"] = {"en-ca"},
},
["nicard"] = {
["descriptions"] = {"Niçard"},
["prefixes"] = {"oc"},
},
["njiva"] = {
["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["nulik"] = {
["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"},
["prefixes"] = {"vo"},
},
["osojs"] = {
["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["oxendict"] = {
["descriptions"] = {"Oxford English Dictionary spelling"},
["prefixes"] = {"en"},
},
["pahawh2"] = {
["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh3"] = {
["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh4"] = {
["descriptions"] = {"Pahawh Hmong Final Version orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pamaka"] = {
["descriptions"] = {"Pamaka dialect"},
["prefixes"] = {"djk"},
},
["peano"] = {
["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"},
["prefixes"] = {"la"},
},
["petr1708"] = {
["descriptions"] = {"Petrine orthography"},
["prefixes"] = {"ru"},
},
["pinyin"] = {
["descriptions"] = {"Pinyin romanization"},
["prefixes"] = {"zh-latn", "bo-latn"},
},
["polyton"] = {
["descriptions"] = {"Polytonic Greek"},
["prefixes"] = {"el"},
},
["provenc"] = {
["descriptions"] = {"Provençal"},
["prefixes"] = {"oc"},
},
["puter"] = {
["descriptions"] = {"Puter idiom of Romansh"},
["prefixes"] = {"rm"},
},
["rigik"] = {
["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"},
["prefixes"] = {"vo"},
},
["rozaj"] = {
["descriptions"] = {"Resian", "Resianic", "Rezijan"},
["prefixes"] = {"sl"},
},
["rumgr"] = {
["descriptions"] = {"Rumantsch Grischun"},
["prefixes"] = {"rm"},
},
["scotland"] = {
["descriptions"] = {"Scottish Standard English"},
["prefixes"] = {"en"},
},
["scouse"] = {
["descriptions"] = {"Scouse"},
["prefixes"] = {"en"},
},
["simple"] = {
["descriptions"] = {"Simplified form"},
["prefixes"] = {},
},
["solba"] = {
["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["sotav"] = {
["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["spanglis"] = {
["descriptions"] = {"Spanglish"},
["prefixes"] = {"en", "es"},
},
["surmiran"] = {
["descriptions"] = {"Surmiran idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sursilv"] = {
["descriptions"] = {"Sursilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sutsilv"] = {
["descriptions"] = {"Sutsilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["synnejyl"] = {
["descriptions"] = {"Synnejysk", "South Jutish"},
["prefixes"] = {"da"},
},
["tarask"] = {
["descriptions"] = {"Belarusian in Taraskievica orthography"},
["prefixes"] = {"be"},
},
["tongyong"] = {
["descriptions"] = {"Tongyong Pinyin romanization"},
["prefixes"] = {"zh-latn"},
},
["tunumiit"] = {
["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"},
["prefixes"] = {"kl"},
},
["uccor"] = {
["descriptions"] = {"Unified Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ucrcor"] = {
["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ulster"] = {
["descriptions"] = {"Ulster dialect of Scots"},
["prefixes"] = {"sco"},
},
["unifon"] = {
["descriptions"] = {"Unifon phonetic alphabet"},
["prefixes"] = {"en", "hup", "kyh", "tol", "yur"},
},
["vaidika"] = {
["descriptions"] = {"Vedic Sanskrit"},
["prefixes"] = {"sa"},
},
["valencia"] = {
["descriptions"] = {"Valencian"},
["prefixes"] = {"ca"},
},
["vallader"] = {
["descriptions"] = {"Vallader idiom of Romansh"},
["prefixes"] = {"rm"},
},
["vecdruka"] = {
["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"},
["prefixes"] = {"lv"},
},
["vivaraup"] = {
["descriptions"] = {"Vivaro-Alpine"},
["prefixes"] = {"oc"},
},
["wadegile"] = {
["descriptions"] = {"Wade-Giles romanization"},
["prefixes"] = {"zh-latn"},
},
["xsistemo"] = {
["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
}
}
6e18c8087ecffb70ab2722634deb5ede2d84fffa
Module:Language/data/iana suppressed scripts
828
244
712
2023-05-28T16:32:52Z
wikipedia>Trappist the monk
0
update to 2023-05-11 data;
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["Arab"] = {"ar", "fa", "ps", "ur"},
["Armn"] = {"hy"},
["Beng"] = {"as", "bn"},
["Blis"] = {"zbl"},
["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"},
["Deva"] = {"hi", "mr", "ne", "kok", "mai"},
["Ethi"] = {"am", "ti"},
["Geor"] = {"ka"},
["Grek"] = {"el"},
["Gujr"] = {"gu"},
["Guru"] = {"pa"},
["Hebr"] = {"he", "iw", "yi"},
["Jpan"] = {"ja"},
["Khmr"] = {"km"},
["Knda"] = {"kn"},
["Kore"] = {"ko"},
["Laoo"] = {"lo"},
["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo",
"es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn",
"gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb",
"ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd",
"nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn",
"ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv",
"sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb",
"frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh",
"tpi", "tvl"},
["Mlym"] = {"ml"},
["Mymr"] = {"my"},
["Nkoo"] = {"nqo"},
["Orya"] = {"or"},
["Sinh"] = {"si"},
["Taml"] = {"ta"},
["Telu"] = {"te"},
["Thaa"] = {"dv"},
["Thai"] = {"th"},
["Tibt"] = {"dz"}
}
fd9ca3f5beaba5fdfc149a8d24e63fa3a9768f4f
Template:High-use
10
117
264
2023-05-30T09:39:48Z
wikipedia>Lectonar
0
Changed protection settings for "[[Template:High-use]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
{{#invoke:High-use|main|1={{{1|}}}|2={{{2|}}}|info={{{info|}}}|demo={{{demo|}}}|form={{{form|}}}|expiry={{{expiry|}}}|system={{{system|}}}}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage; interwiki links go to Wikidata, thank you! -->
</noinclude>
a3322d1bd47ac03df14fa2090855cff4fede9bc7
Module:High-use
828
119
270
2023-05-30T11:20:32Z
wikipedia>Lectonar
0
Changed protection settings for "[[Module:High-use]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
local p = {}
-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch
local yesno = require('Module:Yesno')
function p.num(frame, count)
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
-- Build output string
local return_value = ""
if count == nil then
if frame.args[1] == "risk" then
return_value = "a very large number of"
else
return_value = "many"
end
else
-- Use 2 significant figures for smaller numbers and 3 for larger ones
local sigfig = 2
if count >= 100000 then
sigfig = 3
end
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(count)) - sigfig + 1
-- Round and insert "approximately" or "+" when appropriate
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
-- Round down
return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
else
-- Round to nearest
return_value = string.format("approximately %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
end
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
if percent >= 1 then
return_value = string.format("%s pages, or roughly %s%% of all", return_value, percent)
end
end
end
return return_value
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
function p.risk(frame)
local return_value = ""
if frame.args[1] == "risk" then
return_value = "risk"
else
local count = _fetch(frame)
if count and count >= 100000 then return_value = "risk" end
end
return return_value
end
function p.text(frame, count)
-- Only show the information about how this template gets updated if someone
-- is actually editing the page and maybe trying to update the count.
local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or ''
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" then
title = title.basePageTitle
end
local systemMessages = frame.args['system']
if frame.args['system'] == '' then
systemMessages = nil
end
-- This retrieves the project URL automatically to simplify localiation.
local templateCount = ('on [https://linkcount.toolforge.org/index.php?project=%s&page=%s %s pages]'):format(
mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'),
mw.uri.encode(title.fullText), p.num(frame, count))
local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used ';
if systemMessages then
used_on_text = used_on_text .. systemMessages ..
((count and count > 2000) and ("''', and " .. templateCount) or ("'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local sandbox_text = ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format(
(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"),
title.fullText, title.fullText,
mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage"
)
local infoArg = frame.args["info"] ~= "" and frame.args["info"]
if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
local info = systemMessages and '.<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or '.'
if infoArg then
info = info .. "<br />" .. infoArg
end
sandbox_text = info .. '<br /> To avoid major disruption' ..
(count and count >= 100000 and ' and server load' or '') ..
', any changes should be tested in the ' .. sandbox_text ..
'The tested changes can be added to this page in a single edit. '
else
sandbox_text = (infoArg and ('.<br />' .. infoArg .. ' C') or ' and c') ..
'hanges may be widely noticed. Test changes in the ' .. sandbox_text
end
local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes '
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"])
else
discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText )
end
return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text
end
function p.main(frame)
local count = nil
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local epilogue = ''
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
type_param = "content"
local nocat = frame:getParent().args['nocat'] or frame.args['nocat']
local categorise = (nocat == '' or not yesno(nocat))
if categorise then
epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}')
end
elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
type_param = "content"
end
if frame.args["form"] == "editnotice" then
return frame:expandTemplate{
title = 'editnotice',
args = {
["image"] = image,
["text"] = p.text(frame, count),
["expiry"] = (frame.args["expiry"] or "")
}
} .. epilogue
else
return require('Module:Message box').main('ombox', {
type = type_param,
image = image,
text = p.text(frame, count),
expiry = (frame.args["expiry"] or "")
}) .. epilogue
end
end
return p
134551888e066954a89c109d2faa8af71a4454a4
Template:Blue
10
441
1331
2023-05-30T14:40:35Z
mw>Hoo man
0
Reverted edits by [[Special:Contribs/2001:16A2:C15E:4BB2:8559:30FB:A2BE:4CD2|2001:16A2:C15E:4BB2:8559:30FB:A2BE:4CD2]] ([[User talk:2001:16A2:C15E:4BB2:8559:30FB:A2BE:4CD2|talk]]) to last version by कन्हाई प्रसाद चौरसिया
wikitext
text/x-wiki
<span style="color:#0645AD;">{{{1}}}</span><noinclude>{{documentation}}
[[Category:Formatting templates{{#translation:}}|{{PAGENAME}}]]
</noinclude>
636ccfaac2c8947c9d036c2a6ac80aeb94f89713
Module:Transclusion count
828
120
272
2023-05-30T20:51:38Z
wikipedia>Isabelle Belato
0
Changed protection settings for "[[Module:Transclusion count]]": [[WP:High-risk templates|Highly visible template]]; requested at [[WP:RfPP]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
local p = {}
function p.fetch(frame)
local template = nil
local return_value = nil
-- Use demo parameter if it exists, otherswise use current template name
local namespace = mw.title.getCurrentTitle().namespace
if frame.args["demo"] and frame.args["demo"] ~= "" then
template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","")
elseif namespace == 10 then -- Template namespace
template = mw.title.getCurrentTitle().text
elseif namespace == 828 then -- Module namespace
template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text)
end
-- If in template or module namespace, look up count in /data
if template ~= nil then
namespace = mw.title.new(template, "Template").namespace
if namespace == 10 or namespace == 828 then
template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end
template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end
local index = mw.ustring.sub(mw.title.new(template).text,1,1)
local status, data = pcall(function ()
return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")))
end)
if status then
return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")])
end
end
end
-- If database value doesn't exist, use value passed to template
if return_value == nil and frame.args[1] ~= nil then
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
if arg1 and arg1 ~= '' then
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
end
end
return return_value
end
-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]]
function p.tabulate(frame)
local list = {}
for i = 65, 91 do
local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i)))
for name, count in pairs(data) do
table.insert(list, {mw.title.new(name, "Template").fullText, count})
end
end
table.sort(list, function(a, b)
return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2])
end)
local lang = mw.getContentLanguage();
for i = 1, #list do
list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2]))
end
return table.concat(list)
end
return p
000ef6bcbf7b66e727870b0c300c4009da300513
Module:Lang
828
237
698
2023-06-03T14:57:26Z
wikipedia>Trappist the monk
0
sync from sandbox per [[Template_talk:Lang#Edit_request_3_June_2023|edit request]];
Scribunto
text/plain
--[=[
Lua support for the {{lang}}, {{lang-xx}}, and {{transl}} templates and replacement of various supporting templates.
]=]
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local unicode = require ("Module:Unicode data"); -- for is_latin() and is_rtl()
local yesno = require ('Module:Yesno');
local lang_data = mw.loadData ('Module:Lang/data'); -- language name override and transliteration tool-tip tables
local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts
local lang_table = lang_data.lang_name_table.lang;
local lang_dep_table = lang_data.lang_name_table.lang_dep;
local script_table = lang_data.lang_name_table.script;
local region_table = lang_data.lang_name_table.region;
local variant_table = lang_data.lang_name_table.variant;
local suppressed_table = lang_data.lang_name_table.suppressed;
local override_table = lang_data.override;
local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code
local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization
local content_lang = mw.language.getContentLanguage();
local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag
local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction
local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic()
local maint_cats = {}; -- maintenance categories go here
local maint_msgs = {}; -- and their messages go here
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
]]
local function is_set( var )
return not (var == nil or var == '');
end
--[[--------------------------< I N V E R T _ I T A L I C S >-------------------------------------------------
This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup
in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing
apostrophes are converted to their html numeric entity equivalent so that the new italic markup doesn't become
bold markup inadvertently.
Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal,
replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements.
In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns.
This function expects that markup in args.text is complete and correct; if it is not, oddness may result.
]]
local function invert_italics (source)
local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns
[""]="\'\'", -- empty string becomes italic markup
["\'\'"]="", -- italic markup becomes empty string
["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic
["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold
};
local seg = {};
source = source:gsub ("%f[\']\'%f[^\']", '''); -- protect single quote marks from being interpreted as bold markup
seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote
seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote
if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text'
seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup
elseif '' ~= seg[1] then
seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup
elseif '' ~= seg[3] then
seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup
else
seg[2] = source -- when there is no markup
end
seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table
seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table
return table.concat (seg); -- put it all back together and done
end
--[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------
validates |italic= or |italics= assigned values.
When |italic= is set and has an acceptible assigned value, return the matching css font-style property value or,
for the special case 'default', return nil.
When |italic= is not set, or has an unacceptible assigned value, return nil and a nil error message.
When both |italic= and |italics= are set, returns nil and a 'conflicting' error message.
The return value nil causes the calling lang, lang_xx, or transl function to set args.italic according to the template's
defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-xx}} depending on
the individual template's requirements, 'italic' for {{transl}}) or to the value appropriate to |script=, if set ({{lang}}
and {{lang-xx}} only).
Accepted values and the values that this function returns are are:
nil - when |italic= absent or not set; returns nil
default - for completeness, should rarely if ever be used; returns nil
yes - force args.text to be rendered in italic font; returns 'italic'
no - force args.text to be rendered in normal font; returns 'normal'
unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit'
invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert'
]]
local function validate_italic (args)
local properties = {['yes'] = 'italic', ['no'] = 'normal', ['unset'] = 'inherit', ['invert'] = 'invert', ['default'] = nil};
local count = 0
for _, arg in pairs {'italic', 'italics', 'i'} do
if args[arg] then
count = count + 1
end
end
if count > 1 then -- return nil and an error message if more than one is set
return nil, 'only one of |italic=, |italics=, or |i= can be specified';
end
return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message
end
--[=[--------------------------< V A L I D A T E _ C A T _ A R G S >----------------------------------------------------------
Default behavior of the {{lang}} and {{lang-xx}} templates is to add categorization when the templates are used in mainspace.
This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters
to control categorization.
Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative
values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the
parameter is treated as if it were not set in the template.
Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply.
Accepted values for |nocat= are the text strings:
'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else
for |cat=
'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else
]=]
local function validate_cat_args (args)
if not (args.nocat or args.cat) then -- both are nil, so categorize
return;
end
if false == yesno (args.cat) or true == yesno (args.nocat) then
args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template)
else -- args.nocat is the parameter actually used.
args.nocat = nil;
end
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack
]]
local function in_array ( needle, haystack )
if needle == nil then
return false;
end
for n,v in ipairs( haystack ) do
if v == needle then
return n;
end
end
return false;
end
--[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------
prettify ietf tags to use recommended subtag formats:
code: lower case
script: sentence case
region: upper case
variant: lower case
private: lower case prefixed with -x-
]]
local function format_ietf_tag (code, script, region, variant, private)
local out = {};
if is_set (private) then
return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored
end
table.insert (out, code:lower());
if is_set (script) then
script = script:lower():gsub ('^%a', string.upper);
table.insert (out, script);
end
if is_set (region) then
table.insert (out, region:upper());
end
if is_set (variant) then
table.insert (out, variant:lower());
end
return table.concat (out, '-');
end
--[[--------------------------< G E T _ I E T F _ P A R T S >--------------------------------------------------
extracts and returns IETF language tag parts:
primary language subtag (required) - 2 or 3 character IANA language code
script subtag - four character IANA script code
region subtag - two-letter or three digit IANA region code
variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported
private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag
in any one of these forms
lang lang-variant
lang-script lang-script-variant
lang-region lang-region-variant
lang-script-region lang-script-region-variant
lang-x-private
each of lang, script, region, variant, and private, when used, must be valid
Languages with both two- and three-character code synonyms are promoted to the two-character synonym because
the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding
the synonymous three-character codes in the lang= attribute.
For {{lang-xx}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}}
because those parameters are superfluous to the IETF subtags in |code=)
returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid
parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil.
see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1
]]
local function get_ietf_parts (source, args_script, args_region, args_variant)
local code, script, region, variant, private; -- ietf tag parts
if not is_set (source) then
return nil, nil, nil, nil, nil, 'missing language tag';
end
local pattern = { -- table of tables holding acceptibe ietf tag patterns and short names of the ietf part captured by the pattern
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits)
{'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss
{'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR
{'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits)
{'^(%a%a%a?)$'}, -- 18 - ll
{'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters)
}
local t = {}; -- table of captures; serves as a translator between captured ietf tag parts and named variables
for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match
local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here
c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i])
if c1 then -- c1 always set on match
code = c1; -- first capture is always code
t = {
[pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures
[pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures
[pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table
};
script = t.s or ''; -- translate table contents to named variables;
region = t.r or ''; -- absent table entries are nil so set named ietf parts to empty string for concatenation
variant= t.v or '';
private = t.p or '';
break; -- and done
end
end
if not code then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language tag: ', source}); -- don't know what we got but it is malformed
end
code = code:lower(); -- ensure that we use and return lower case version of this
if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language code: ', code}); -- invalid language code, don't know about the others (don't care?)
end
if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym
table.insert (maint_cats, table.concat ({'Lang and lang-xx code promoted to ISO 639-1|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]}));
code = synonym_table[code]; -- use the synonym
end
if is_set (script) then
if is_set (args_script) then
return code, nil, nil, nil, nil, 'redundant script tag'; -- both code with script and |script= not allowed
end
else
script = args_script or ''; -- use args.script if provided
end
if is_set (script) then
script = script:lower(); -- ensure that we use and return lower case version of this
if not script_table[script] then
return code, nil, nil, nil, nil, table.concat ({'unrecognized script: ', script, ' for code: ', code}); -- language code ok, invalid script, don't know about the others (don't care?)
end
end
if suppressed_table[script] then -- ensure that code-script does not use a suppressed script
if in_array (code, suppressed_table[script]) then
return code, nil, nil, nil, nil, table.concat ({'script: ', script, ' not supported for code: ', code}); -- language code ok, script is suppressed for this code
end
end
if is_set (region) then
if is_set (args_region) then
return code, nil, nil, nil, nil, 'redundant region tag'; -- both code with region and |region= not allowed
end
else
region = args_region or ''; -- use args.region if provided
end
if is_set (region) then
region = region:lower(); -- ensure that we use and return lower case version of this
if not region_table[region] then
return code, script, nil, nil, nil, table.concat ({'unrecognized region: ', region, ' for code: ', code});
end
end
if is_set (variant) then
if is_set (args_variant) then
return code, nil, nil, nil, nil, 'redundant variant tag'; -- both code with variant and |variant= not allowed
end
else
variant = args_variant or ''; -- use args.variant if provided
end
if is_set (variant) then
variant = variant:lower(); -- ensure that we use and return lower case version of this
if not variant_table[variant] then -- make sure variant is valid
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant});
end -- does this duplicate/replace tests in lang() and lang_xx()?
if is_set (script) then -- if script set it must be part of the 'prefix'
if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-script pair: ', code, '-', script});
end
elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound)
if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred)
if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound)
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-region pair: ', code, '-', region});
end
end
else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0
if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code: ', code});
end
end
end
if is_set (private) then
private = private:lower(); -- ensure that we use and return lower case version of this
if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index
return code, script, region, nil, nil, table.concat ({'unrecognized private tag: ', private});
end
end
return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil
end
--[[--------------------------< M A K E _ E R R O R _ M S G >--------------------------------------------------
assembles an error message from template name, message text, help link, and error category.
]]
local function make_error_msg (msg, args, template)
local out = {};
local category;
if 'Transl' == template then
category = 'Transl';
else
category = 'Lang and lang-xx'
end
table.insert (out, table.concat ({'[', args.text or 'undefined', '] '})); -- for error messages output args.text if available
table.insert (out, table.concat ({'<span style=\"color:#d33\">Error: {{', template, '}}: '}));
table.insert (out, msg);
table.insert (out, table.concat ({' ([[:Category:', category, ' template errors|help]])'}));
table.insert (out, '</span>');
if (0 == namespace or 10 == namespace) and not args.nocat then -- categorize in article space (and template space to take care of broken usages)
table.insert (out, table.concat ({'[[Category:', category, ' template errors]]'}));
end
return table.concat (out);
end
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
empty string.
]=]
local function make_wikilink (link, display)
if is_set (link) then
if is_set (display) then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
else
return '';
end
end
--[[--------------------------< D I V _ M A R K U P _ A D D >--------------------------------------------------
adds <i> and </i> tags to list-item text or to implied <p>..</p> text. mixed not supported
]]
local function div_markup_add (text, style)
local implied_p = {};
if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text
if 'italic' == style then
return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item
else
return text;
end
end
if text:find ('\n+') then -- look for any number of \n characters in text
text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics mediawiki
if 'italic' == style then
text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each impled p (two or more consecutive '\n\n' sequences)
else
text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each impled p
text = text:gsub ('\n', ''); -- strip newline characters
end
end
return text;
end
--[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------
makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where
<title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in
html markup. This because the lang= attibute applies to the content of its enclosing tag.
<tag> holds a string 'div' or 'span' used to choose the correct wrapping tag
]]
local function title_wrapper_make (title_text, content_text, tag)
local wrapper_t = {};
table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag
table.insert (wrapper_t, ' title=\"'); -- begin title attribute
table.insert (wrapper_t, title_text); -- add <title_text>
table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag
table.insert (wrapper_t, content_text); -- add <content_text>
table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag
return table.concat (wrapper_t); -- make a big string and done
end
--[[--------------------------< M A K E _ T E X T _ H T M L >--------------------------------------------------
Add the html markup to text according to the type of content that it is: <span> or <i> tags for inline content or
<div> tags for block content
The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish
language text' is English:
<i lang="es" title="Spanish language text">casa</i>
should be:
<span title="Spanish language text"><i lang="es">casa</i></span>
or for <div>...</div>:
<div title="Spanish language text"><div lang="es"><spanish-language-text></div></div>
]]
local function make_text_html (code, text, tag, rtl, style, size, language)
local html_t = {};
local style_added = '';
local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div
if text:match ('^%*') then
table.insert (html_t, '*'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki
text = text:gsub ('^%*', ''); -- remove the splat from the text
end
if 'span' == tag then -- default html tag for inline content
if 'italic' == style then -- but if italic
tag = 'i'; -- change to <i> tags
end
else -- must be div so go
text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i>
end
table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> html tag
code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of wikipedia
table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute
if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki
table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages
elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki
table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages
end
if 'normal' == style then -- when |italic=no
table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
if is_set (size) then -- when |size=<something>
if is_set (style_added) then
table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted
else
table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
end
table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening html tag
table.insert (html_t, text); -- insert the text
table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> html tag
if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div
local title_text;
if 'zxx' == code then -- special case for this tag 'no linguistic content'
title_text = table.concat ({language, ' text'}); -- not a language so don't use 'language' in title text
elseif mw.ustring.find (language, 'languages', 1, true) then
title_text = table.concat ({language, ' collective text'}); -- for collective languages
else
title_text = table.concat ({language, '-language text'}); -- for individual languages
end
return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag);
else
return table.concat (html_t);
end
end
--[=[-------------------------< M A K E _ C A T E G O R Y >----------------------------------------------------
For individual language, <language>, returns:
[[Category:Articles containing <language>-language text]]
for English:
[[Category:Articles containing explicitly cited English-language text]]
for ISO 639-2 collective languages (and for 639-1 bh):
[[Category:Articles with text in <language> languages]]
]=]
local function make_category (code, language_name, nocat, name_get)
local cat = {};
local retval;
if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space
return ''; -- return empty string for concatenation
end
if mw.ustring.find (language_name, 'languages', 1, true) then
return table.concat ({'[[Category:Articles with text in ', language_name, ']]'});
end
table.insert (cat, '[[Category:Articles containing ');
if this_wiki_lang_tag == code then
table.insert (cat, 'explicitly cited ' .. language_name); -- unique category name for the local language
else
table.insert (cat, language_name);
end
table.insert (cat, '-language text]]');
return table.concat (cat);
end
--[[--------------------------< M A K E _ T R A N S L I T >----------------------------------------------------
return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string
The value |script= is not used in {{transl}} for this purpose; instead it uses |code. Because language scripts
are listed in the {{transl}} switches they are included in the data tables. The script parameter is introduced
at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code.
To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed
to be |translit-script= (in this function, tscript)
This function is used by both lang_xx() and transl()
lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style
transl() always provides language_name, translit, and one of code or tscript, never both; always provides style
For {{transl}}, style only applies when a language code is provided
]]
local function make_translit (code, language_name, translit, std, tscript, style)
local title;
local out_t = {};
local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local title_text = ''; -- tool tip text for title= attribute
std = std and std:lower(); -- lower case for table indexing
if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified
title_text = language_name; -- write a generic tool tip
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' romanization'; -- finish the tool tip; use romanization when neither script nor standard supplied
elseif is_set (std) and is_set (tscript) then -- when both are specified
if title_t[std] then -- and if standard is legitimate
if title_t[std][tscript] then -- and if script for that standard is legitimate
if script_table[tscript] then
title_text = title_text .. table.concat ({title_t[std][tscript:lower()], ' (', script_table[tscript], ' script) transliteration'}); -- add the appropriate text to the tool tip
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
return ''; -- invalid standard, setup for error message
end
elseif is_set (std) then -- translit-script not set, use language code
if not title_t[std] then return ''; end -- invalid standard, setup for error message
if title_t[std][code] then -- if language code is in the table (transl may not provide a language code)
title_text = title_text .. table.concat ({title_t[std][code:lower()], ' (', language_name, ' language) transliteration'}); -- add the appropriate text to the tool tip
else -- code doesn't match
title_text = title_text .. title_t[std]['default']; -- so use the standard's default
end
else -- here if translit-script set but translit-std not set
if title_t['no_std'][tscript] then
title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set
elseif title_t['no_std'][code] then
title_text = title_text .. title_t['no_std'][code]; -- use language code
else
if is_set (tscript) then
title_text = title_text .. table.concat ({language_name, '-script transliteration'}); -- write a script tool tip
elseif is_set (code) then
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' transliteration'; -- finish the tool tip
else
title_text = title_text .. ' transliteration'; -- generic tool tip (can we ever get here?)
end
end
end
local close_tag;
if is_set (code) then -- when a language code is provided (always with {{lang-xx}} templates, not always with {{transl}})
code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag
if not style then -- nil for the default italic style
table.insert (out_t, "<i lang=\""); -- so use <i> tag
close_tag = '</i>'; -- tag to be used when closing
else
table.insert (out_t, table.concat ({'<span style=\"font-style: ', style, '\" lang=\"'})); -- non-standard style, construct a span tag for it
close_tag = '</span>'; -- tag to be used when closing
end
table.insert (out_t, code);
table.insert (out_t, "-Latn\">"); -- transliterations are always Latin script
else
table.insert (out_t, "<span>"); -- when no language code: no lang= attribute, not italic ({{transl}} only)
close_tag = '</span>';
end
table.insert (out_t, translit); -- add the translit text
table.insert (out_t, close_tag); -- and add the appropriate </i> or </span>
if '' == title_text then -- when there is no need for a tool-tip
return table.concat (out_t); -- make a string and done
else
return title_wrapper_make (title_text, table.concat (out_t), 'span'); -- wrap with a tool-tip span and don
end
end
--[[--------------------------< V A L I D A T E _ T E X T >----------------------------------------------------
This function checks the content of args.text and returns empty string if nothing is amiss else it returns an
error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup.
Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text
either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert.
]]
local function validate_text (template, args)
if not is_set (args.text) then
return make_error_msg ('no text', args, template);
end
if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes
return make_error_msg ('text has malformed markup', args, template);
end
local style = args.italic;
if ('unset' ~= style) and ('invert' ~=style) then
if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic
return make_error_msg ('text has italic markup', args, template);
end
end
end
--[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------
render mainenance messages and categories
]]
local function render_maint(nocat)
local maint = {};
if 0 < #maint_msgs then -- when there are maintenance messages
table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag
for _, msg in ipairs (maint_msgs) do
table.insert (maint, table.concat ({msg, ' '})); -- add message strings
end
table.insert (maint, '</span>'); -- close the span
end
if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only
for _, cat in ipairs (maint_cats) do
table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories
end
end
return table.concat (maint);
end
--[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------
for proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat
will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we
do nothing
proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and / or inhibits
regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac
]]
local function proto_prefix (text, language_name, proto_param)
if false == proto_param then -- when forced by |proto=no
return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text
elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes
return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats
end
return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat
end
--[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------
looks for a poem strip marker in text; returns true when found; false else
auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know
the content that will replace the stripmarker.
]]
local function has_poem_tag (text)
return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false;
end
--[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------
Inspects content of and selectively trims text. Returns text and the name of an appropriate html tag for text.
If text contains:
\n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return
If text begins with list markup:
\n* unordered
\n; definition
\n: definition
\n# ordered
trim all leading whitespace except \n and trim all trailing whitespace
If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because
the stripmarker is replaced with text wrapped in <div>..</div> tags.
If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div>
tags are used to wrap it, to prevent div/span inversion.
]]
local function html_tag_select (text)
local tag;
if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that)
tag = 'div'; -- poem replacement is in div tags so lang must use div tags
elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags
tag = 'div';
elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags
text = mw.text.trim (text); -- trim leading and trailing whitespace characters
tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags
elseif text:find ('\n[%*:;%#]') then -- if text has list markup
text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n'
tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki)
else
text = mw.text.trim (text); -- plain text
tag = 'span'; -- so span is fine
end
return text, tag;
end
--[[--------------------------< V A L I D A T E _ P R O T O >--------------------------------------------------
validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false,
empty string (or parameter omitted) returns as nil; any other value returns as nil with a second return value of
true indicating that some other value has been assigned to |proto=
]]
local function validate_proto (proto_param)
if 'yes' == proto_param then
return true;
elseif 'no' == proto_param then
return false;
elseif is_set (proto_param) then
return nil, true; -- |proto= something other than 'yes' or 'no'
else
return nil; -- missing or empty
end
end
--[[--------------------------< L A N G U A G E _ N A M E _ G E T >--------------------------------------------
common function to return language name from the data set according to IETF tag
returns language name if found in data tables; nil else
]]
local function language_name_get (ietf, code, cat)
ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case
local name; -- remains nil if not found
if override_table[ietf] then -- look for whole IETF tag in override table
name = override_table[ietf];
elseif override_table[code] then -- not there so try basic language tag
name = override_table[code];
elseif lang_table[code] then -- shift to iana active tag/name table
name = lang_table[code];
elseif lang_dep_table[code] then -- try the iana deprecated tag/name table
name = lang_dep_table[code];
end
if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name
table.insert (maint_cats, table.concat ({'Lang and lang-xx using deprecated ISO 639 codes|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' is deprecated'}));
end
return name; -- name from data tables or nil
end
--[[--------------------------< _ L A N G >--------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function _lang (args)
local out = {};
local language_name; -- used to make category names
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, variant, and private
local code; -- the language code
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
validate_cat_args (args); -- determine if categorization should be suppressed
if args[1] and args.code then
return make_error_msg ('conflicting: {{{1}}} and |code=', args, template);
else
args.code = args[1] or args.code; -- prefer args.code
end
if args[2] and args.text then
return make_error_msg ('conflicting: {{{2}}} and |text=', args, template);
else
args.text = args[2] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set
if is_set (msg) then -- msg is an already-formatted error message
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}})
if msg then
return make_error_msg ( msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and unicode.is_Latin (args.text)) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics)
args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
if is_set (subtags.script) then -- if script set, override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
if 'invert' == args.italic and 'span' == tag then -- invert only supported for in-line content
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name));
table.insert (out, make_category (code, language_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G >----------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function lang (frame)
local args = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text
valueFunc = function (key, value)
if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return _lang (args);
end
--[[--------------------------< T R A N S L A T I O N _ M A K E >----------------------------------------------
stand-alone function to create literal translation of main text
Also used by {{lang-x2}}
]]
local function translation_make (args_t)
local translation_t = {', '}; -- initialize output
if 'none' ~= args_t.label then -- if we want a label
table.insert (translation_t, '<small>'); -- open the <small> html tag
if 'no' == args_t.link then
table.insert (translation_t, '<abbr title="literal translation">lit.</abbr>'); -- unlinked form
else
table.insert (translation_t, make_wikilink ('Literal translation', 'lit.')); -- linked form
end
table.insert (translation_t, " </small>"); -- close the <small> html tag
end
table.insert (translation_t, table.concat ({''', args_t.translation, '''})); -- use html entities to avoid wiki markup confusion
return table.concat (translation_t); -- make a big string and done
end
--[[--------------------------< L A N G _ X X >----------------------------------------------------------------
For the {{lang-xx}} templates, the only parameter required to be set in the template is the language code. All
other parameters can, usually should, be written in the template call. For {{lang-xx}} templates for languages
that can have multiple writing systems, it may be appropriate to set |script= as well.
For each {{lang-xx}} template choose the appropriate entry-point function so that this function knows the default
styling that should be applied to text.
For normal, upright style:
<includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly>
For italic style:
<includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly>
All other parameters should be received from the template's frame (parent frame)
Supported parameters are:
|code = (required) the IANA language code
|script = IANA script code; especially for use with languages that use multiple writing systems
|region = IANA region code
|variant = IANA variant code
|text = (required) the displayed text in language specified by code
|link = boolean false ('no') does not link code-spcified language name to associated language article
|rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language
|nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected
|cat = boolian false ('no') opposite form of |nocat=
|italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state
|lit = text that is a literal translation of text
|label = 'none' to suppress all labeling (language name, 'translit.', 'lit.')
any other text replaces language-name label - automatic wikilinking disabled
for those {{lang-xx}} templates that support transliteration (those templates where |text= is not entirely latn script):
|translit = text that is a transliteration of text
|translit-std = the standard that applies to the transliteration
|translit-script = ISO 15924 script name; falls back to code
For {{lang-xx}}, the positional parameters are:
{{{1}}} text
{{{2}}} transliterated text
{{{3}}} literal translation text
no other positional parameters are allowed
]]
local function _lang_xx (args)
local out = {};
local language_name; -- used to make display text, article links
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, and variant
local code; -- the language code
local translit_script_name; -- name associated with IANA (ISO 15924) script code
local translit;
local translit_title;
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang-xx';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if args[1] and args.text then
return make_error_msg ('conflicting: {{{1}}} and |text=', args, template);
else
args.text = args[1] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding
if is_set (msg) then
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
if args[2] and args.translit then
return make_error_msg ('conflicting: {{{2}}} and |translit=', args, template);
else
args.translit = args[2] or args.translit -- prefer args.translit
end
if args[3] and (args.translation or args.lit) then
return make_error_msg ('conflicting: {{{3}}} and |lit= or |translation=', args, template);
elseif args.translation and args.lit then
return make_error_msg ('conflicting: |lit= and |translation=', args, template);
else
args.translation = args[3] or args.translation or args.lit; -- prefer args.translation
end
if args.links and args.link then
return make_error_msg ('conflicting: |links= and |link=', args, template);
else
args.link = args.link or args.links; -- prefer args.link
end
validate_cat_args (args); -- determine if categorization should be suppressed
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- args.italic controls
if is_set (subtags.script) then
if 'latn' == subtags.script then
args.italic = 'italic'; -- |script=Latn; set for font-style:italic
else
args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state>
end
else
args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state>
end
end
if is_set (subtags.script) then -- if script set override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any)
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if args.label then
if 'none' ~= args.label then
table.insert (out, table.concat ({args.label, ': '})); -- custom label
end
else
if 'no' == args.link then
table.insert (out, language_name); -- language name without wikilink
else
if mw.ustring.find (language_name, 'languages', 1, true) then
table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data
else
table.insert (out, make_wikilink (language_name .. ' language', language_name)); -- language name with wikilink
end
end
table.insert (out, ': '); -- separator
end
if 'invert' == args.italic then
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil))
if is_set (args.translit) and not unicode.is_Latin (args.text) then -- transliteration (not supported in {{lang}}); not supported when args.text is wholly latn text (this is an imperfect test)
table.insert (out, ', '); -- comma to separate text from translit
if 'none' ~= args.label then
table.insert (out, '<small>');
if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name
translit_script_name = script_table[args['translit-script']];
else
translit_script_name = language_name; -- fall back on language name
end
translit_title = mw.title.makeTitle (0, table.concat ({'Romanization of ', translit_script_name})); -- make a title object
if translit_title.exists and ('no' ~= args.link) then
table.insert (out, make_wikilink ('Romanization of ' .. translit_script_name or language_name, 'romanized') .. ':'); -- make a wikilink if there is an article to link to
else
table.insert (out, 'romanized:'); -- else plain text
end
table.insert (out, ' </small>'); -- close the small tag
end
translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'])
if is_set (translit) then
table.insert (out, translit);
else
return make_error_msg (table.concat ({'invalid translit-std: \'', args['translit-std'] or '[missing]'}), args, template);
end
end
if is_set (args.translation) then -- translation (not supported in {{lang}})
table.insert (out, translation_make (args));
end
table.insert (out, make_category (code, category_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G _ X X _ A R G S _ G E T >----------------------------------------------
common function to get args table from {{lang-??}} templates
returns table of args
]]
local function lang_xx_args_get (frame)
local args = getArgs(frame,
{
parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}}
valueFunc = function (key, value)
if 1 == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return args;
end
--[[--------------------------< L A N G _ X X _ I T A L I C >--------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_italic(). Sets the initial style state to italic.
]]
local function lang_xx_italic (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------
Entry point ffrom another module. Sets the initial style state to italic.
]]
local function _lang_xx_italic (args)
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_inherit(). Sets the initial style state to inherit.
]]
local function lang_xx_inherit (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I N H E R I T >----------------------------------------------
Entry point from another module. Sets the initial style state to inherit.
]]
local function _lang_xx_inherit (args)
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------
Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _is_ietf_tag (tag) -- entry point when this module is require()d into another
local c, s, r, v, p, err; -- code, script, region, variant, private, error message
c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate
return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else
end
--[[--------------------------< I S _ I E T F _ T A G >--------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_ietf_tag (frame)
return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the ietf language tag to be tested; also get parent frame
end
--[[--------------------------< I S _ I E T F _ T A G _ F R A M E >--------------------------------------------
Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent
(template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag>
is in the parent frame.
]]
local function is_ietf_tag_frame (frame)
return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the ietf language tag to be tested; do not get parent frame
end
--[[--------------------------< _ N A M E _ F R O M _ T A G >--------------------------------------------------
Returns language name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Set invoke's |link= parameter to yes to get wikilinked version of the language name.
Module entry point from another module
]]
local function _name_from_tag (args)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args['link']; -- make a boolean
local label = args.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local language_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
language_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if link then -- when |link=yes, wikilink the language name
if mw.ustring.find (language_name, 'languages', 1, true) then
language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data
else
language_name = make_wikilink (language_name .. ' language', label or language_name); -- language name with wikilink
end
end
return language_name;
end
--[[--------------------------< N A M E _ F R O M _ T A G >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function name_from_tag (frame) -- entry point from an {{#invoke:Lang|name_from_tag|<ietf tag>|link=<yes>|template=<template name>}}
return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< _ T A G _ F R O M _ N A M E >--------------------------------------------------
Returns the ietf language tag associated with the language name. Spelling of language name must be correct
according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator,
that disambiguator must be omitted (they are not present in the data name-to-tag tables).
Module entry point from another module
]]
local function _tag_from_name (args) -- entry point from another module
local msg;
if args[1] and '' ~= args[1] then
local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live
local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct)
local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard
if tag then
return tag, true; -- language name found so return tag and done; second return used by is_lang_name()
else
msg = 'language: ' .. args[1] .. ' not found' -- language name not found, error message
end
else
msg = 'missing language name' -- language name not provided, error message
end
local template = '';
if args.template and '' ~= args.template then
template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template)
end
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
--[[--------------------------< T A G _ F R O M _ N A M E >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function tag_from_name (frame) -- entry point from an {{#invoke:Lang|tag_from_name|<language name>|link=<yes>|template=<template name>}}
local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name()
return result;
end
--[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_lang_name (frame)
local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name()
return result and true or nil;
end
--[[--------------------------< _ T R A N S L >----------------------------------------------------------------
Module entry point from another module
]]
local function _transl (args)
local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local language_name; -- language name that matches language code; used for tool tip
local translit; -- transliterated text to display
local script; -- IANA script
local msg; -- for when called functions return an error message
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if is_set (args[3]) then -- [3] set when {{transl|code|standard|text}}
args.text = args[3]; -- get the transliterated text
args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing
if not title_table[args.translit_std] then
return make_error_msg (table.concat ({'unrecognized transliteration standard: ', args.translit_std}), args, 'Transl');
end
else
if is_set (args[2]) then -- [2] set when {{transl|code|text}}
args.text = args[2]; -- get the transliterated text
else
if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text?
args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag
return make_error_msg ('no text', args, 'Transl'); -- args[1] is a code so we're missing text
else
args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message
return make_error_msg ('missing language / script code', args, 'Transl');
end
end
end
if is_set (args[1]) then -- IANA language code used for html lang= attribute; or ISO 15924 script code
if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form?
args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args[1]}), args, 'Transl'); -- invalid language / script code
end
else
return make_error_msg ('missing language / script code', args, 'Transl'); -- missing language / script code so quit
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, 'Transl');
end
if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default
args.italic = nil; -- set to nil;
end
if override_table[args.code] then -- is code a language code defined in the override table?
language_name = override_table[args.code];
args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag
elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables?
language_name = lang_table[args.code];
elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables?
language_name = lang_dep_table[args.code];
elseif script_table[args.code] then -- if here, code is not a language code; is it a script code?
language_name = script_table[args.code];
script = args.code; -- code was an ISO 15924 script so use that instead
args.code = ''; -- unset because not a language code
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args.code}), args, 'Transl'); -- invalid language / script code
end
-- here only when all parameters passed to make_translit() are valid
return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic);
end
--[[--------------------------< T R A N S L >------------------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function transl (frame)
return _transl (getArgs(frame));
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Returns category name associated with IETF language tag if valid; error message else
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _category_from_tag (args_t)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args_t[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args_t.link; -- make a boolean
local label = args_t.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local category_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
category_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', '');
if link then
return table.concat ({'[[:', category_name, ']]'});
else
return category_name;
end
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function category_from_tag (frame) -- entry point from an {{#invoke:Lang|category_from_tag|<ietf tag>|template=<template name>}}
return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
category_from_tag = category_from_tag,
lang = lang, -- entry point for {{lang}}
lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}}
lang_xx_italic = lang_xx_italic,
is_ietf_tag = is_ietf_tag,
is_ietf_tag_frame = is_ietf_tag_frame,
is_lang_name = is_lang_name,
tag_from_name = tag_from_name, -- returns ietf tag associated with language name
name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates
transl = transl, -- entry point for {{transl}}
_category_from_tag = _category_from_tag, -- entry points when this module is require()d into other modules
_lang = _lang,
_lang_xx_inherit = _lang_xx_inherit,
_lang_xx_italic = _lang_xx_italic,
_is_ietf_tag = _is_ietf_tag,
get_ietf_parts = get_ietf_parts,
_tag_from_name = _tag_from_name,
_name_from_tag = _name_from_tag,
_transl = _transl,
_translation_make = translation_make,
};
9d4ce44c7c49db6155692a2f959ea14ce5f8df40
Template:Navbox visibility
10
131
294
2023-06-03T15:34:42Z
wikipedia>WhatamIdoing
0
Update
wikitext
text/x-wiki
Templates using the classes <code>class=navbox</code> ({{tl|navbox}}) or <code>class=nomobile</code> ({{tl|sidebar}}) are not displayed on the [https://en.m.wikipedia.org/ mobile web site] of English Wikipedia. Mobile page views account for approximately 65% of all page views (90-day average {{as of|May 2023|lc=y}}).<noinclude>
{{documentation}}
</noinclude>
3b1f65df829fd9f96b9c4f002fba38a0fd987a6b
Module:Transclusion count/data/D
828
161
369
2023-06-04T05:11:45Z
wikipedia>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
Scribunto
text/plain
return {
["D&D"] = 3900,
["D&D_to-do"] = 5600,
["D-da"] = 2600,
["DANFS"] = 8400,
["DC-Comics-trademark-copyright"] = 2100,
["DCS_Sri_Lanka"] = 2100,
["DDR"] = 2800,
["DEC"] = 8600,
["DECADE"] = 283000,
["DEN"] = 6700,
["DEU"] = 17000,
["DMC"] = 61000,
["DMCA"] = 2090000,
["DNB"] = 8800,
["DNB-Portal"] = 2100,
["DNB_portal"] = 3800,
["DNK"] = 7700,
["DNZB"] = 3600,
["DOM"] = 2100,
["DOWs"] = 2600,
["DPP"] = 100000,
["DPP/logo"] = 100000,
["DRV_links"] = 3600,
["DWT"] = 2300,
["DYKC"] = 6700,
["DYKF"] = 2100,
["DYK_blue"] = 3400,
["DYK_checklist"] = 13000,
["DYK_conditions"] = 65000,
["DYK_files"] = 2100,
["DYK_header"] = 32000,
["DYK_nompage_links"] = 76000,
["DYK_talk"] = 102000,
["DYK_talk/date"] = 102000,
["DYK_tools"] = 51000,
["DYK_tools/styles.css"] = 51000,
["DYKfile"] = 12000,
["DZA"] = 2700,
["Dab"] = 17000,
["Dablink"] = 2100,
["Dagger"] = 17000,
["Dashboard.wikiedu.org_assignment"] = 13000,
["Dashboard.wikiedu.org_bibliography/guide"] = 6400,
["Dashboard.wikiedu.org_course_header"] = 5900,
["Dashboard.wikiedu.org_course_header/edit-note"] = 5900,
["Dashboard.wikiedu.org_draft_template/about_this_sandbox"] = 9800,
["Dashboard.wikiedu.org_evaluate_article/guide"] = 7200,
["Dashboard.wikiedu.org_peer_review/guide"] = 11000,
["Dashboard.wikiedu.org_sandbox"] = 91000,
["Dashboard.wikiedu.org_student_editor"] = 79000,
["Dashboard.wikiedu.org_student_program_sandbox"] = 91000,
["Dashboard.wikiedu.org_talk_course_link"] = 80000,
["Dashboard.wikiedu.org_user_talk"] = 2200,
["Date"] = 41000,
["Date-mf"] = 38000,
["Date_table_sorting"] = 38000,
["Dated_maintenance_category"] = 2150000,
["Dated_maintenance_category_(articles)"] = 2090000,
["Dated_maintenance_category_by_type_(articles)"] = 21000,
["Davis_Cup_player"] = 2500,
["Day+1"] = 6900,
["Day-1"] = 8300,
["Dbox"] = 3000,
["Dda"] = 5300,
["Dead_YouTube_link"] = 2700,
["Dead_Youtube_links"] = 2500,
["Dead_link"] = 275000,
["Death-date"] = 11000,
["Death-date_and_age"] = 10000,
["Death_date"] = 9100,
["Death_date_and_age"] = 380000,
["Death_date_and_given_age"] = 2500,
["Death_year_and_age"] = 16000,
["Death_year_category_header"] = 2000,
["Decade"] = 2100,
["Decade_link"] = 32000,
["Decimals"] = 3000,
["Decline"] = 2500,
["Declined"] = 3200,
["Decrease"] = 34000,
["Define"] = 5100,
["Deg2DMS"] = 3400,
["Deletion_review_log_header"] = 5600,
["Deletion_review_log_header/Core"] = 5600,
["Delink"] = 1960000,
["Delink_question_hyphen-minus"] = 292000,
["Delrevxfd"] = 3500,
["Democratic_Party_(US)/meta/shading"] = 15000,
["Description_missing"] = 6900,
["Designation/abbreviation"] = 8100,
["Designation/color"] = 76000,
["Designation/colour"] = 79000,
["Designation/colour2"] = 18000,
["Designation/divbox"] = 29000,
["Designation/text"] = 42000,
["Designation_list"] = 5300,
["Details"] = 4700,
["DetailsLink"] = 5800,
["Detect_singular"] = 197000,
["Deutsche_Bahn_station_codes"] = 2200,
["DfE_performance_tables"] = 4500,
["Diff"] = 30000,
["Diff2"] = 11000,
["Digits"] = 21000,
["Directories_box"] = 3200,
["Disamb"] = 2200,
["Disambig"] = 63000,
["Disambig-Class"] = 12000,
["DisambigProj"] = 12000,
["DisambigProject"] = 150000,
["Disambigproject"] = 5800,
["Disambiguation"] = 216000,
["Disambiguation/cat"] = 216000,
["Disambiguation_page_short_description"] = 350000,
["Discogs_artist"] = 16000,
["Discogs_master"] = 12000,
["Discogs_release"] = 3000,
["Discussion_bottom"] = 11000,
["Discussion_top"] = 12000,
["DisestcatCountry"] = 9500,
["DisestcatCountry/core"] = 9500,
["DisestcatCountryDecade"] = 2600,
["DisestcatUSstate"] = 4900,
["DisestcatUSstate/core"] = 4900,
["Disputed"] = 2200,
["Distinguish"] = 95000,
["Disused_Rail_Start"] = 4000,
["Disused_rail_start"] = 4300,
["Disused_style"] = 4600,
["Div_col"] = 396000,
["Div_col/styles.css"] = 398000,
["Div_col_end"] = 297000,
["Div_col_start"] = 2900,
["Div_end"] = 2600,
["Divbox"] = 333000,
["Divbox/styles.css"] = 357000,
["Dividing_line"] = 4000,
["Dmbox"] = 456000,
["Dmbox/styles.css"] = 456000,
["Do_not_move_to_Commons"] = 16000,
["Doc"] = 3500,
["Documentation"] = 89000,
["Documentation_subpage"] = 95000,
["Dog_opentask"] = 3400,
["Doi"] = 25000,
["Doing"] = 3600,
["Don't_edit_this_line"] = 106000,
["Don't_edit_this_line_always_display"] = 469000,
["Don't_edit_this_line_extinct"] = 469000,
["Don't_edit_this_line_link_target"] = 469000,
["Don't_edit_this_line_link_text"] = 469000,
["Don't_edit_this_line_parent"] = 469000,
["Don't_edit_this_line_rank"] = 469000,
["Don't_edit_this_line_refs"] = 106000,
["Don't_edit_this_line_same_as"] = 469000,
["Done"] = 101000,
["Doppelganger"] = 2700,
["Dot"] = 2600,
["Double+single"] = 2700,
["Double-dagger"] = 18000,
["Dr"] = 3400,
["Dr-logno"] = 3400,
["Dr-make"] = 3400,
["Dr-yr"] = 3400,
["Draft"] = 3700,
["Draft_article"] = 5700,
["Draft_article_check"] = 5800,
["Draft_categories"] = 6100,
["Draft_other"] = 115000,
["Draft_topics"] = 26000,
["Drafts_moved_from_mainspace"] = 12000,
["Draw"] = 3800,
["Draw_key"] = 17000,
["Draw_links"] = 13000,
["Drep"] = 3400,
["Drugbankcite"] = 4300,
["Drugbox"] = 7500,
["Drugs.com"] = 3600,
["Ds/talk_notice"] = 6200,
["Dts"] = 38000,
["Dubious"] = 8100,
["Duck"] = 2900,
["Dummytab"] = 4800,
["Duration"] = 38000,
["Dutch_municipality"] = 2600,
["Dyktalk"] = 42000,
["Dynamic_list"] = 9800,
["Module:DYK_checklist"] = 13000,
["Module:DYK_checklist/data"] = 13000,
["Module:DYK_nompage_links"] = 76000,
["Module:Data"] = 148000,
["Module:Date"] = 1360000,
["Module:DateI18n"] = 65000,
["Module:Date_table_sorting"] = 38000,
["Module:DecodeEncode"] = 113000,
["Module:Delink"] = 2070000,
["Module:Detect_singular"] = 1500000,
["Module:Disambiguation"] = 3500000,
["Module:Distinguish"] = 95000,
["Module:Documentation"] = 135000,
["Module:Documentation/config"] = 135000,
["Module:Documentation/styles.css"] = 135000,
["Module:Draft_topics"] = 26000,
["Module:Duration"] = 236000,
}
28eacb8bec85d8e4733a57d9fa28b3b3ffa8696b
Module:Transclusion count/data/I
828
190
541
2023-06-04T05:12:35Z
wikipedia>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
Scribunto
text/plain
return {
["IAAF_name"] = 2200,
["IAST"] = 5900,
["IBDB_name"] = 9100,
["ICD10"] = 4600,
["ICD9"] = 4400,
["ICS"] = 2900,
["IDN"] = 3300,
["IMDb_episode"] = 9800,
["IMDb_episodes"] = 2500,
["IMDb_name"] = 152000,
["IMDb_title"] = 187000,
["IMO_Number"] = 4100,
["IMSLP"] = 8200,
["INA"] = 2100,
["IND"] = 7400,
["INR"] = 6200,
["INRConvert"] = 5500,
["INRConvert/CurrentRate"] = 5400,
["INRConvert/USD"] = 5400,
["INRConvert/out"] = 5400,
["IOC_profile"] = 5600,
["IP"] = 2600,
["IPA"] = 140000,
["IPA-all"] = 3500,
["IPA-de"] = 8000,
["IPA-es"] = 7800,
["IPA-fr"] = 44000,
["IPA-it"] = 5800,
["IPA-nl"] = 3700,
["IPA-pl"] = 4000,
["IPA-pt"] = 3600,
["IPA-ru"] = 2600,
["IPA-sh"] = 2700,
["IPA-sl"] = 6900,
["IPA-th"] = 2900,
["IPA_audio_link"] = 19000,
["IPA_link"] = 3400,
["IPAc-cmn"] = 2600,
["IPAc-en"] = 48000,
["IPAc-pl"] = 52000,
["IPC_athlete"] = 2600,
["IPSummary"] = 77000,
["IP_summary"] = 78000,
["IPsock"] = 9300,
["IPtalk"] = 22000,
["IPuser"] = 6900,
["IPvandal"] = 2900,
["IRC"] = 6500,
["IRI"] = 2200,
["IRL"] = 5400,
["IRN"] = 3500,
["ISBN"] = 461000,
["ISBNT"] = 38000,
["ISBN_missing"] = 2300,
["ISFDB_name"] = 4100,
["ISFDB_title"] = 4500,
["ISL"] = 2100,
["ISO_15924/script-example-character"] = 2800,
["ISO_15924/wp-article"] = 2800,
["ISO_15924/wp-article/format"] = 2800,
["ISO_15924/wp-article/label"] = 2700,
["ISO_3166_code"] = 509000,
["ISO_3166_name"] = 16000,
["ISO_639_name"] = 7900,
["ISP"] = 5400,
["ISR"] = 4700,
["ISSN"] = 12000,
["ISSN_link"] = 30000,
["ISTAT"] = 8100,
["ISU_figure_skater"] = 2500,
["ITA"] = 17000,
["ITF"] = 6100,
["ITF_profile"] = 9000,
["ITIS"] = 4300,
["ITN_talk"] = 9800,
["ITN_talk/date"] = 9800,
["IUCN_banner"] = 15000,
["I_sup"] = 4500,
["Iaaf_name"] = 7400,
["Ice_hockey"] = 19000,
["Ice_hockey_stats"] = 16000,
["Icehockeystats"] = 12000,
["Icon"] = 572000,
["If"] = 265000,
["If_all"] = 6000,
["If_between"] = 3700,
["If_both"] = 8250000,
["If_empty"] = 3670000,
["If_first_display_both"] = 73000,
["If_in_page"] = 8800,
["If_last_display_both"] = 30000,
["If_preview"] = 57000,
["If_then_show"] = 278000,
["Ifempty"] = 4000,
["Ifeq"] = 16000,
["Iferror_then_show"] = 3200,
["Ifexist_not_redirect"] = 1110000,
["Ifnotempty"] = 14000,
["Ifnumber"] = 34000,
["Ifsubst"] = 97000,
["Ih"] = 7500,
["Ill"] = 109000,
["Illm"] = 6800,
["Image_frame"] = 3800,
["Image_label"] = 4500,
["Image_label_begin"] = 3800,
["Image_label_end"] = 3500,
["Image_label_small"] = 2600,
["Image_needed"] = 4500,
["Image_other"] = 279000,
["Image_requested"] = 170000,
["Image_requested/Category_helper"] = 163000,
["Imbox"] = 915000,
["Imdb_name"] = 5300,
["Imdb_title"] = 4200,
["Import_style"] = 11000,
["Import_style/inputbox.css"] = 11000,
["Importance"] = 5530000,
["Importance/colour"] = 5550000,
["Importance_mask"] = 8610000,
["Improve_categories"] = 6800,
["Improve_documentation"] = 2000,
["In_class"] = 5600,
["In_lang"] = 352000,
["In_progress"] = 3100,
["In_string"] = 71000,
["In_title"] = 19000,
["Inactive_WikiProject_banner"] = 216000,
["Inactive_userpage_blanked"] = 4900,
["Include-USGov"] = 29000,
["Incomplete_list"] = 22000,
["Inconclusive"] = 2100,
["Increase"] = 42000,
["Incumbent_pope"] = 4300,
["Indent"] = 4200,
["IndexFungorum"] = 2300,
["Indian_English"] = 4200,
["Indian_Rupee"] = 10000,
["Indian_railway_code"] = 3100,
["Inflation"] = 18000,
["Inflation-fn"] = 5300,
["Inflation-year"] = 4400,
["Inflation/IN/startyear"] = 5500,
["Inflation/UK"] = 4300,
["Inflation/UK/dataset"] = 4300,
["Inflation/UK/startyear"] = 4300,
["Inflation/US"] = 11000,
["Inflation/US/dataset"] = 11000,
["Inflation/US/startyear"] = 11000,
["Inflation/fn"] = 6100,
["Inflation/year"] = 23000,
["Info"] = 7200,
["Infobox"] = 3190000,
["Infobox/Columns"] = 2300,
["Infobox/mobileviewfix.css"] = 141000,
["Infobox3cols"] = 16000,
["Infobox_AFL_biography"] = 14000,
["Infobox_Aircraft_Begin"] = 5400,
["Infobox_Aircraft_Type"] = 4700,
["Infobox_Athletics_Championships"] = 2700,
["Infobox_Australian_place"] = 15000,
["Infobox_CFL_biography"] = 2200,
["Infobox_COA_wide"] = 3100,
["Infobox_Canada_electoral_district"] = 2400,
["Infobox_Canadian_Football_League_biography"] = 5800,
["Infobox_Canadian_Football_League_biography/position"] = 5700,
["Infobox_Chinese"] = 20000,
["Infobox_Chinese/Chinese"] = 2700,
["Infobox_Chinese/Footer"] = 8700,
["Infobox_Chinese/Header"] = 8700,
["Infobox_Chinese/Korean"] = 17000,
["Infobox_Christian_leader"] = 18000,
["Infobox_Election"] = 2200,
["Infobox_French_commune"] = 38000,
["Infobox_GAA_player"] = 2900,
["Infobox_Gaelic_games_player"] = 5000,
["Infobox_German_location"] = 13000,
["Infobox_German_place"] = 14000,
["Infobox_Grand_Prix_race_report"] = 2000,
["Infobox_Greece_place"] = 2800,
["Infobox_Greek_Dimos"] = 2800,
["Infobox_Hindu_temple"] = 2400,
["Infobox_Indian_constituency"] = 4500,
["Infobox_Indian_constituency/defaultdata"] = 4500,
["Infobox_Italian_comune"] = 8100,
["Infobox_Korean_name"] = 15000,
["Infobox_Korean_name/categories"] = 15000,
["Infobox_MLB_yearly"] = 3100,
["Infobox_NASCAR_race_report"] = 2100,
["Infobox_NCAA_team_season"] = 18000,
["Infobox_NFL_biography"] = 28000,
["Infobox_NFL_player"] = 8000,
["Infobox_NFL_season"] = 2500,
["Infobox_NFL_team_season"] = 3900,
["Infobox_NRHP"] = 72000,
["Infobox_NRHP/conv"] = 18000,
["Infobox_NRHP/locmapin2region"] = 66000,
["Infobox_Officeholder"] = 4900,
["Infobox_Olympic_event"] = 7300,
["Infobox_Olympic_event/games_text"] = 7300,
["Infobox_Paralympic_event"] = 2600,
["Infobox_Paralympic_event/games_text"] = 2600,
["Infobox_Politician"] = 2200,
["Infobox_Romanian_subdivision"] = 3100,
["Infobox_Russian_district"] = 2000,
["Infobox_Russian_inhabited_locality"] = 4400,
["Infobox_SCOTUS_case"] = 3700,
["Infobox_Site_of_Special_Scientific_Interest"] = 2000,
["Infobox_Swiss_town"] = 2800,
["Infobox_Switzerland_municipality"] = 2900,
["Infobox_Turkey_place"] = 12000,
["Infobox_U.S._county"] = 3000,
["Infobox_U.S._county/district"] = 3000,
["Infobox_UK_constituency"] = 2100,
["Infobox_UK_constituency/year"] = 2100,
["Infobox_UK_legislation"] = 2900,
["Infobox_UK_place"] = 25000,
["Infobox_UK_place/NoDialCode"] = 7900,
["Infobox_UK_place/NoPostCode"] = 3000,
["Infobox_UK_place/area"] = 2300,
["Infobox_UK_place/dist"] = 2500,
["Infobox_UK_place/local"] = 25000,
["Infobox_UK_place/styles.css"] = 25000,
["Infobox_UN_resolution"] = 2300,
["Infobox_US_Supreme_Court_case"] = 3800,
["Infobox_US_Supreme_Court_case/courts"] = 3800,
["Infobox_Wikipedia_user"] = 9500,
["Infobox_YouTube_personality"] = 2600,
["Infobox_YouTube_personality/styles.css"] = 2600,
["Infobox_academic"] = 13000,
["Infobox_aircraft_begin"] = 14000,
["Infobox_aircraft_occurrence"] = 2200,
["Infobox_aircraft_type"] = 12000,
["Infobox_airline"] = 4600,
["Infobox_airport"] = 15000,
["Infobox_airport/datatable"] = 15000,
["Infobox_album"] = 161000,
["Infobox_album/color"] = 189000,
["Infobox_album/link"] = 161000,
["Infobox_anatomy"] = 4400,
["Infobox_ancient_site"] = 5300,
["Infobox_animanga/Footer"] = 6700,
["Infobox_animanga/Header"] = 6700,
["Infobox_animanga/Print"] = 5400,
["Infobox_animanga/Video"] = 4600,
["Infobox_architect"] = 3600,
["Infobox_artist"] = 28000,
["Infobox_artist_discography"] = 5900,
["Infobox_artwork"] = 11000,
["Infobox_athlete"] = 3000,
["Infobox_automobile"] = 8400,
["Infobox_award"] = 13000,
["Infobox_badminton_player"] = 3200,
["Infobox_baseball_biography"] = 28000,
["Infobox_baseball_biography/style"] = 28000,
["Infobox_baseball_biography/styles.css"] = 28000,
["Infobox_basketball_biography"] = 20000,
["Infobox_basketball_biography/style"] = 20000,
["Infobox_basketball_club"] = 3000,
["Infobox_beauty_pageant"] = 2400,
["Infobox_bilateral_relations"] = 4300,
["Infobox_body_of_water"] = 18000,
["Infobox_book"] = 51000,
["Infobox_boxer"] = 5700,
["Infobox_bridge"] = 6000,
["Infobox_building"] = 27000,
["Infobox_character"] = 7700,
["Infobox_chess_biography"] = 3600,
["Infobox_chess_player"] = 3000,
["Infobox_church"] = 14000,
["Infobox_church/denomination"] = 14000,
["Infobox_church/font_color"] = 14000,
["Infobox_civil_conflict"] = 2300,
["Infobox_civilian_attack"] = 5300,
["Infobox_college_coach"] = 11000,
["Infobox_college_football_game"] = 2100,
["Infobox_college_sports_team_season"] = 39000,
["Infobox_college_sports_team_season/link"] = 39000,
["Infobox_college_sports_team_season/name"] = 39000,
["Infobox_college_sports_team_season/succession"] = 39000,
["Infobox_college_sports_team_season/team"] = 39000,
["Infobox_comic_book_title"] = 2900,
["Infobox_comics_character"] = 3600,
["Infobox_comics_creator"] = 3500,
["Infobox_comics_creator/styles.css"] = 3500,
["Infobox_company"] = 83000,
["Infobox_computing_device"] = 2300,
["Infobox_concert"] = 3200,
["Infobox_constituency"] = 5000,
["Infobox_country"] = 6300,
["Infobox_country/formernext"] = 5900,
["Infobox_country/imagetable"] = 5100,
["Infobox_country/multirow"] = 8100,
["Infobox_country/status_text"] = 2700,
["Infobox_country/styles.css"] = 6300,
["Infobox_country_at_games"] = 14000,
["Infobox_country_at_games/core"] = 14000,
["Infobox_country_at_games/see_also"] = 12000,
["Infobox_court_case"] = 4600,
["Infobox_court_case/images"] = 2400,
["Infobox_cricket_tournament"] = 2300,
["Infobox_cricketer"] = 32000,
["Infobox_cricketer/career"] = 32000,
["Infobox_cricketer/national_side"] = 7400,
["Infobox_criminal"] = 6200,
["Infobox_curler"] = 2600,
["Infobox_cycling_race_report"] = 4400,
["Infobox_cyclist"] = 16000,
["Infobox_dam"] = 5500,
["Infobox_designation_list"] = 19000,
["Infobox_designation_list/entry"] = 17000,
["Infobox_dim"] = 6900,
["Infobox_dim/core"] = 6900,
["Infobox_diocese"] = 3800,
["Infobox_drug"] = 9400,
["Infobox_drug/chemical_formula"] = 9500,
["Infobox_drug/data_page_link"] = 9400,
["Infobox_drug/formatATC"] = 9300,
["Infobox_drug/formatCASnumber"] = 9500,
["Infobox_drug/formatChEBI"] = 9500,
["Infobox_drug/formatChEMBL"] = 9500,
["Infobox_drug/formatChemDBNIAID"] = 9500,
["Infobox_drug/formatChemSpider"] = 9500,
["Infobox_drug/formatCompTox"] = 9500,
["Infobox_drug/formatDrugBank"] = 9500,
["Infobox_drug/formatIUPHARBPS"] = 9500,
["Infobox_drug/formatJmol"] = 9500,
["Infobox_drug/formatKEGG"] = 9500,
["Infobox_drug/formatPDBligand"] = 8800,
["Infobox_drug/formatPubChemCID"] = 9500,
["Infobox_drug/formatPubChemSID"] = 9500,
["Infobox_drug/formatUNII"] = 9500,
["Infobox_drug/legal_status"] = 9600,
["Infobox_drug/licence"] = 9500,
["Infobox_drug/maintenance_categories"] = 9500,
["Infobox_drug/non-ref-space"] = 3900,
["Infobox_drug/pregnancy_category"] = 9500,
["Infobox_drug/title"] = 9500,
["Infobox_election"] = 29000,
["Infobox_election/row"] = 29000,
["Infobox_election/shortname"] = 27000,
["Infobox_enzyme"] = 5100,
["Infobox_ethnic_group"] = 7100,
["Infobox_event"] = 5200,
["Infobox_family"] = 2100,
["Infobox_figure_skater"] = 4200,
["Infobox_film"] = 154000,
["Infobox_film/short_description"] = 150000,
["Infobox_film_awards"] = 2600,
["Infobox_film_awards/link"] = 2600,
["Infobox_film_awards/style"] = 2600,
["Infobox_food"] = 6800,
["Infobox_football_biography"] = 204000,
["Infobox_football_club"] = 27000,
["Infobox_football_club_season"] = 20000,
["Infobox_football_league"] = 2500,
["Infobox_football_league_season"] = 19000,
["Infobox_football_match"] = 5800,
["Infobox_football_tournament_season"] = 8000,
["Infobox_former_subdivision"] = 3300,
["Infobox_former_subdivision/styles.css"] = 3300,
["Infobox_galaxy"] = 2000,
["Infobox_game"] = 2400,
["Infobox_game_score"] = 3400,
["Infobox_gene"] = 13000,
["Infobox_given_name"] = 4000,
["Infobox_golfer"] = 4400,
["Infobox_golfer/highest_ranking"] = 4400,
["Infobox_government_agency"] = 10000,
["Infobox_government_cabinet"] = 2500,
["Infobox_gridiron_football_person"] = 2600,
["Infobox_gridiron_football_person/position"] = 5700,
["Infobox_gymnast"] = 3400,
["Infobox_handball_biography"] = 4900,
["Infobox_historic_site"] = 11000,
["Infobox_horseraces"] = 2600,
["Infobox_hospital"] = 6200,
["Infobox_hospital/care_system"] = 6200,
["Infobox_hospital/lists"] = 6200,
["Infobox_ice_hockey_biography"] = 20000,
["Infobox_ice_hockey_player"] = 19000,
["Infobox_ice_hockey_team"] = 3000,
["Infobox_ice_hockey_team_season"] = 2000,
["Infobox_international_football_competition"] = 5600,
["Infobox_islands"] = 8700,
["Infobox_islands/area"] = 9100,
["Infobox_islands/density"] = 9100,
["Infobox_islands/length"] = 8700,
["Infobox_islands/styles.css"] = 8700,
["Infobox_journal"] = 9700,
["Infobox_journal/Abbreviation_search"] = 9600,
["Infobox_journal/Bluebook_check"] = 9300,
["Infobox_journal/Former_check"] = 9300,
["Infobox_journal/ISO_4_check"] = 9300,
["Infobox_journal/ISSN-eISSN"] = 9400,
["Infobox_journal/Indexing_search"] = 9500,
["Infobox_journal/MathSciNet_check"] = 9300,
["Infobox_journal/NLM_check"] = 9300,
["Infobox_journal/frequency"] = 8500,
["Infobox_lake"] = 4400,
["Infobox_language"] = 9500,
["Infobox_language/family-color"] = 11000,
["Infobox_language/genetic"] = 6500,
["Infobox_language/linguistlist"] = 9500,
["Infobox_language/ref"] = 7100,
["Infobox_legislature"] = 3600,
["Infobox_library"] = 2100,
["Infobox_lighthouse"] = 2600,
["Infobox_lighthouse/light"] = 2600,
["Infobox_locomotive"] = 4800,
["Infobox_magazine"] = 7500,
["Infobox_manner_of_address"] = 3300,
["Infobox_mapframe"] = 78000,
["Infobox_martial_artist"] = 5600,
["Infobox_martial_artist/record"] = 5600,
["Infobox_medal_templates"] = 418000,
["Infobox_medical_condition"] = 10000,
["Infobox_medical_condition_(new)"] = 8200,
["Infobox_military_conflict"] = 21000,
["Infobox_military_installation"] = 9600,
["Infobox_military_person"] = 44000,
["Infobox_military_unit"] = 26000,
["Infobox_mine"] = 2100,
["Infobox_model"] = 2300,
["Infobox_mountain"] = 28000,
["Infobox_multi-sport_competition_event"] = 2200,
["Infobox_museum"] = 10000,
["Infobox_musical_artist"] = 121000,
["Infobox_musical_artist/color"] = 121000,
["Infobox_musical_artist/hCard_class"] = 310000,
["Infobox_musical_composition"] = 2800,
["Infobox_name"] = 7400,
["Infobox_name_module"] = 6600,
["Infobox_newspaper"] = 9500,
["Infobox_nobility"] = 2400,
["Infobox_noble"] = 7200,
["Infobox_officeholder"] = 213000,
["Infobox_officeholder/office"] = 218000,
["Infobox_official_post"] = 7900,
["Infobox_organization"] = 35000,
["Infobox_pageant_titleholder"] = 2800,
["Infobox_park"] = 7200,
["Infobox_person"] = 464000,
["Infobox_person/Wikidata"] = 5000,
["Infobox_person/height"] = 101000,
["Infobox_person/length"] = 7000,
["Infobox_person/weight"] = 66000,
["Infobox_philosopher"] = 3300,
["Infobox_planet"] = 4700,
["Infobox_play"] = 3800,
["Infobox_political_party"] = 14000,
["Infobox_power_station"] = 3000,
["Infobox_prepared_food"] = 3100,
["Infobox_professional_wrestler"] = 4200,
["Infobox_professional_wrestling_event"] = 2600,
["Infobox_protected_area"] = 14000,
["Infobox_protein_family"] = 2100,
["Infobox_publisher"] = 2400,
["Infobox_racehorse"] = 5500,
["Infobox_racing_driver"] = 3600,
["Infobox_radio_station"] = 22000,
["Infobox_rail"] = 2900,
["Infobox_rail_line"] = 7200,
["Infobox_rail_line/tracking"] = 7200,
["Infobox_rail_service"] = 2900,
["Infobox_rail_service/doc"] = 2900,
["Infobox_reality_competition_season"] = 3400,
["Infobox_record_label"] = 4000,
["Infobox_recurring_event"] = 6300,
["Infobox_religious_biography"] = 5000,
["Infobox_religious_building"] = 12000,
["Infobox_religious_building/color"] = 17000,
["Infobox_restaurant"] = 2400,
["Infobox_river"] = 30000,
["Infobox_river/calcunit"] = 30000,
["Infobox_river/discharge"] = 30000,
["Infobox_river/row-style"] = 30000,
["Infobox_river/source"] = 30000,
["Infobox_road"] = 24000,
["Infobox_road/meta/mask/category"] = 23000,
["Infobox_road/meta/mask/country"] = 24000,
["Infobox_road/styles.css"] = 25000,
["Infobox_road_small"] = 2300,
["Infobox_rockunit"] = 6400,
["Infobox_royalty"] = 21000,
["Infobox_royalty/short_description"] = 13000,
["Infobox_rugby_biography"] = 15000,
["Infobox_rugby_biography/correct_date"] = 15000,
["Infobox_rugby_biography/depcheck"] = 15000,
["Infobox_rugby_league_biography"] = 9900,
["Infobox_rugby_league_biography/PLAYER"] = 9800,
["Infobox_rugby_team"] = 2600,
["Infobox_sailboat_specifications"] = 2200,
["Infobox_saint"] = 4900,
["Infobox_school"] = 38000,
["Infobox_school/short_description"] = 38000,
["Infobox_school_district"] = 5600,
["Infobox_school_district/styles.css"] = 5600,
["Infobox_scientist"] = 48000,
["Infobox_service_record"] = 2600,
["Infobox_settlement"] = 557000,
["Infobox_settlement/areadisp"] = 232000,
["Infobox_settlement/columns"] = 93000,
["Infobox_settlement/columns/styles.css"] = 93000,
["Infobox_settlement/densdisp"] = 430000,
["Infobox_settlement/impus"] = 81000,
["Infobox_settlement/lengthdisp"] = 168000,
["Infobox_settlement/link"] = 93000,
["Infobox_settlement/metric"] = 207000,
["Infobox_settlement/pref"] = 288000,
["Infobox_settlement/styles.css"] = 557000,
["Infobox_ship_begin"] = 41000,
["Infobox_ship_career"] = 37000,
["Infobox_ship_characteristics"] = 40000,
["Infobox_ship_class_overview"] = 4100,
["Infobox_ship_image"] = 40000,
["Infobox_shopping_mall"] = 3400,
["Infobox_short_story"] = 2300,
["Infobox_skier"] = 2500,
["Infobox_soap_character"] = 2900,
["Infobox_software"] = 14000,
["Infobox_software/simple"] = 14000,
["Infobox_song"] = 75000,
["Infobox_song/color"] = 75000,
["Infobox_song/link"] = 75000,
["Infobox_spaceflight"] = 3500,
["Infobox_spaceflight/styles.css"] = 3500,
["Infobox_sport_event"] = 2100,
["Infobox_sports_competition_event"] = 16000,
["Infobox_sports_competition_event/medalrow"] = 11000,
["Infobox_sports_league"] = 4900,
["Infobox_sports_season"] = 5300,
["Infobox_sports_team"] = 2200,
["Infobox_sportsperson"] = 105000,
["Infobox_stadium"] = 3600,
["Infobox_station"] = 55000,
["Infobox_station/doc"] = 54000,
["Infobox_station/services"] = 55000,
["Infobox_station/styles.css"] = 55000,
["Infobox_street"] = 3300,
["Infobox_swimmer"] = 9300,
["Infobox_television"] = 56000,
["Infobox_television/Short_description"] = 54000,
["Infobox_television_channel"] = 6200,
["Infobox_television_episode"] = 12000,
["Infobox_television_episode/styles.css"] = 12000,
["Infobox_television_season"] = 9300,
["Infobox_television_station"] = 3700,
["Infobox_tennis_biography"] = 10000,
["Infobox_tennis_event"] = 2400,
["Infobox_tennis_tournament_event"] = 18000,
["Infobox_tennis_tournament_year"] = 9000,
["Infobox_tennis_tournament_year/color"] = 27000,
["Infobox_tennis_tournament_year/footer"] = 27000,
["Infobox_train"] = 2300,
["Infobox_union"] = 2100,
["Infobox_university"] = 26000,
["Infobox_user"] = 2600,
["Infobox_venue"] = 18000,
["Infobox_video_game"] = 27000,
["Infobox_video_game/styles.css"] = 27000,
["Infobox_volleyball_biography"] = 5200,
["Infobox_weapon"] = 7200,
["Infobox_website"] = 7700,
["Infobox_writer"] = 38000,
["Information"] = 105000,
["Information/styles.css"] = 105000,
["Inprogress"] = 2300,
["Input_link"] = 32000,
["Instagram"] = 10000,
["Interlanguage_link"] = 146000,
["Interlanguage_link_multi"] = 20000,
["Internet_Archive_author"] = 18000,
["Internet_Archive_film"] = 2500,
["Intitle"] = 12000,
["Invalid_SVG"] = 3700,
["Invalid_SVG/styles.css"] = 3700,
["Ipsock"] = 7900,
["Iptalk"] = 21000,
["IranCensus2006"] = 50000,
["IranNCSGN"] = 3200,
["Iran_Census_2006"] = 50000,
["Irc"] = 2100,
["Irish_place_name"] = 2600,
["IsIPAddress"] = 41000,
["IsValidPageName"] = 138000,
["Is_country_in_Central_America"] = 13000,
["Is_country_in_the_Caribbean"] = 14000,
["Is_interwiki_link"] = 6100,
["Is_italic_taxon"] = 469000,
["Is_redirect"] = 26000,
["Isbn"] = 7300,
["Isfdb_name"] = 3800,
["Isfdb_title"] = 4400,
["Isnumeric"] = 204000,
["Iso2continent"] = 35000,
["Iso2country"] = 23000,
["Iso2country/article"] = 23000,
["Iso2country/data"] = 23000,
["Iso2nationality"] = 220000,
["Issubst"] = 71000,
["Isu_name"] = 2300,
["Italic_dab2"] = 5100,
["Italic_title"] = 284000,
["Italic_title_prefixed"] = 8600,
["Italics_colon"] = 3500,
["Italictitle"] = 4300,
["Ivm"] = 5700,
["Ivm/styles.css"] = 5700,
["Ivmbox"] = 122000,
["Ivory_messagebox"] = 138000,
["Module:I18n/complex_date"] = 65000,
["Module:IP"] = 129000,
["Module:IPA_symbol"] = 4700,
["Module:IPA_symbol/data"] = 4700,
["Module:IPAc-en"] = 48000,
["Module:IPAc-en/data"] = 48000,
["Module:IPAc-en/phonemes"] = 48000,
["Module:IPAc-en/pronunciation"] = 48000,
["Module:IPAddress"] = 190000,
["Module:ISO_3166"] = 1020000,
["Module:ISO_3166/data/AT"] = 2500,
["Module:ISO_3166/data/BA"] = 3400,
["Module:ISO_3166/data/CA"] = 2500,
["Module:ISO_3166/data/CN"] = 2100,
["Module:ISO_3166/data/DE"] = 14000,
["Module:ISO_3166/data/ES"] = 3600,
["Module:ISO_3166/data/FR"] = 38000,
["Module:ISO_3166/data/GB"] = 6400,
["Module:ISO_3166/data/GR"] = 3100,
["Module:ISO_3166/data/IN"] = 28000,
["Module:ISO_3166/data/IR"] = 4600,
["Module:ISO_3166/data/National"] = 1020000,
["Module:ISO_3166/data/PL"] = 5100,
["Module:ISO_3166/data/RS"] = 3200,
["Module:ISO_3166/data/RU"] = 24000,
["Module:ISO_3166/data/US"] = 84000,
["Module:ISO_639_name"] = 20000,
["Module:ISOdate"] = 65000,
["Module:Icon"] = 573000,
["Module:Icon/data"] = 573000,
["Module:If_empty"] = 3670000,
["Module:If_in_page"] = 8800,
["Module:If_preview"] = 542000,
["Module:If_preview/configuration"] = 542000,
["Module:If_preview/styles.css"] = 542000,
["Module:Import_style"] = 11000,
["Module:In_lang"] = 352000,
["Module:Indent"] = 4200,
["Module:Infobox"] = 4050000,
["Module:Infobox/dates"] = 66000,
["Module:Infobox/styles.css"] = 4310000,
["Module:Infobox3cols"] = 294000,
["Module:InfoboxImage"] = 4350000,
["Module:Infobox_body_of_water_tracking"] = 18000,
["Module:Infobox_cyclist_tracking"] = 16000,
["Module:Infobox_gene"] = 13000,
["Module:Infobox_mapframe"] = 398000,
["Module:Infobox_military_conflict"] = 21000,
["Module:Infobox_military_conflict/styles.css"] = 21000,
["Module:Infobox_multi-lingual_name"] = 20000,
["Module:Infobox_multi-lingual_name/data"] = 20000,
["Module:Infobox_power_station"] = 3000,
["Module:Infobox_road"] = 25000,
["Module:Infobox_road/browselinks"] = 25000,
["Module:Infobox_road/errors"] = 24000,
["Module:Infobox_road/length"] = 25000,
["Module:Infobox_road/locations"] = 24000,
["Module:Infobox_road/map"] = 24000,
["Module:Infobox_road/route"] = 25000,
["Module:Infobox_road/sections"] = 24000,
["Module:Infobox_television"] = 56000,
["Module:Infobox_television_disambiguation_check"] = 63000,
["Module:Infobox_television_episode"] = 12000,
["Module:Infobox_television_season_disambiguation_check"] = 8800,
["Module:Infobox_television_season_name"] = 9300,
["Module:Internet_Archive"] = 18000,
["Module:IrelandByCountyCatNav"] = 2900,
["Module:Is_infobox_in_lead"] = 375000,
["Module:Is_instance"] = 332000,
["Module:Italic_title"] = 1100000,
["Module:Italic_title2"] = 5100,
}
ba90772744fe880e403a431fb72b58155e842d3a
Module:Transclusion count/data/N
828
134
300
2023-06-04T05:13:25Z
wikipedia>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
Scribunto
text/plain
return {
["N"] = 15000,
["N.b."] = 2200,
["N/A"] = 23000,
["N/a"] = 53000,
["NA-Class"] = 14000,
["NASTRO_comment"] = 30000,
["NBA_Draft_template_list"] = 3400,
["NBA_Year"] = 5500,
["NBA_color"] = 3600,
["NBA_color_cell"] = 4300,
["NBA_color_cell2"] = 3400,
["NBA_player_statistics_legend"] = 4200,
["NBA_player_statistics_start"] = 3800,
["NBbox"] = 3400,
["NCAA_color_cell"] = 9600,
["NCAA_secondary_color_cell"] = 4100,
["NCES_District_ID"] = 2600,
["NED"] = 9600,
["NEXTYEAR"] = 7700,
["NFLAltPrimaryStyle"] = 5800,
["NFLPrimaryColor"] = 2200,
["NFLPrimaryStyle"] = 28000,
["NFLSecondaryColor"] = 19000,
["NFL_Roster_navbox_template_list"] = 2600,
["NFL_Year"] = 23000,
["NFL_predraft"] = 5800,
["NFL_predraft/check"] = 5800,
["NFL_predraft/ftin"] = 5800,
["NFLplayer"] = 2100,
["NFT"] = 6800,
["NFT_player"] = 30000,
["NGA"] = 3200,
["NGR"] = 2300,
["NHLE"] = 18000,
["NHLS_url"] = 2200,
["NLD"] = 11000,
["NLM_content"] = 2800,
["NOINDEX"] = 449000,
["NOMIS2011"] = 2300,
["NOR"] = 9400,
["NRDB_species"] = 6900,
["NRHP-PA"] = 2600,
["NRHPGoogleMapFootnote"] = 2500,
["NRHP_Focus"] = 76000,
["NRHP_color"] = 3700,
["NRHP_date_for_lists"] = 3100,
["NRHP_date_for_lists/dates"] = 3100,
["NRHP_header"] = 3300,
["NRHP_navigation_box"] = 8300,
["NRHP_row"] = 3400,
["NRHP_style"] = 70000,
["NRHP_url"] = 29000,
["NRHP_url/core"] = 31000,
["NRISref"] = 73000,
["NSWcity"] = 2100,
["NSWcity/core"] = 2100,
["NUMBEROFSECTIONS"] = 4700,
["NYCS_br"] = 2700,
["NYCS_time_2"] = 3100,
["NZL"] = 6700,
["NZ_electorate_link"] = 2300,
["Na"] = 2400,
["Nac"] = 2700,
["Namespace_detect"] = 568000,
["Namespace_detect_showall"] = 9600,
["Nastaliq"] = 10000,
["Nat_fs_end"] = 2400,
["National_Film_Awards/style"] = 2000,
["National_Heritage_List_for_England"] = 22000,
["National_Rail_style"] = 5700,
["National_Register_of_Historic_Places"] = 29000,
["National_Register_of_Historic_Places_in_Massachusetts"] = 4400,
["National_Register_of_Historic_Places_in_New_York"] = 5600,
["National_Register_of_Historic_Places_in_North_Carolina"] = 2900,
["National_Register_of_Historic_Places_in_Pennsylvania"] = 3200,
["National_Register_of_Historic_Places_in_Virginia"] = 3100,
["National_basketball_squad"] = 3300,
["National_field_hockey_squad"] = 4000,
["National_football_squad_end"] = 2900,
["National_football_squad_start/styles.css"] = 2400,
["National_rugby_union_team"] = 3600,
["National_squad"] = 41000,
["National_squad_no_numbers"] = 17000,
["Native_name"] = 16000,
["Native_name_checker"] = 80000,
["Naval"] = 2900,
["Naval/core"] = 2900,
["Navbar"] = 40000,
["Navbar-collapsible"] = 3600,
["Navbar-header"] = 15000,
["Navbar-header/styles.css"] = 15000,
["Navbox"] = 3050000,
["Navbox_GR_munic"] = 3500,
["Navbox_Musical_artist"] = 9700,
["Navbox_bottom"] = 15000,
["Navbox_decade_list"] = 11000,
["Navbox_ice_hockey"] = 3100,
["Navbox_musical_artist"] = 220000,
["Navbox_musical_artist/color"] = 220000,
["Navbox_rugby_league_squad"] = 4900,
["Navbox_season_by_team"] = 3100,
["Navbox_top"] = 15000,
["Navbox_with_collapsible_groups"] = 131000,
["Navbox_with_collapsible_sections"] = 2300,
["Navbox_with_columns"] = 24000,
["Navboxes"] = 55000,
["Navboxes_colour"] = 5300,
["Navseasoncats"] = 479000,
["Navseasoncats_with_centuries_below_decade"] = 6700,
["Navseasoncats_with_decades_below_year"] = 18000,
["Navsource"] = 2500,
["Navy"] = 19000,
["Navy/core"] = 19000,
["Nay"] = 19000,
["Nbay"] = 5500,
["Nbsp"] = 480000,
["Nbsp_to_space"] = 20000,
["Ndash"] = 20000,
["Nee"] = 9000,
["NeilBrownPlayers"] = 3100,
["New_user_bar"] = 57000,
["Newbot"] = 4200,
["Next_period"] = 21000,
["Nfly"] = 2200,
["Nihongo"] = 102000,
["Nihongo2"] = 12000,
["Nihongo_foot"] = 2600,
["No"] = 8300,
["No."] = 14000,
["No2"] = 10000,
["NoSpam"] = 3900,
["NoSpamEmail"] = 17000,
["No_col_break"] = 2300,
["No_col_break/styles.css"] = 2300,
["No_footnotes"] = 51000,
["No_ping"] = 376000,
["No_plot"] = 5700,
["No_redirect"] = 562000,
["No_spam"] = 258000,
["No_wrap"] = 2300,
["Nobold"] = 382000,
["Nobold/styles.css"] = 382000,
["Nobr"] = 4700,
["Nobreak"] = 28000,
["Nochange"] = 2400,
["Noindex"] = 4800,
["Noitalic"] = 4500,
["Noitalic/styles.css"] = 4500,
["Nom"] = 40000,
["Nominated"] = 7100,
["Non-English-language_text_category"] = 2500,
["Non-admin_closure"] = 2800,
["Non-diffusing_subcategory"] = 13000,
["Non-free_2D_art"] = 7200,
["Non-free_3D_art"] = 2500,
["Non-free_album_cover"] = 201000,
["Non-free_audio_sample"] = 8400,
["Non-free_biog-pic"] = 25000,
["Non-free_book_cover"] = 55000,
["Non-free_character"] = 2400,
["Non-free_comic"] = 11000,
["Non-free_fair_use"] = 17000,
["Non-free_fair_use_in"] = 14000,
["Non-free_film_poster"] = 24000,
["Non-free_film_screenshot"] = 5000,
["Non-free_game_cover"] = 7400,
["Non-free_game_screenshot"] = 4600,
["Non-free_historic_image"] = 16000,
["Non-free_image_data"] = 8600,
["Non-free_image_rationale"] = 9800,
["Non-free_in_US"] = 2100,
["Non-free_logo"] = 162000,
["Non-free_magazine_cover"] = 7700,
["Non-free_media"] = 729000,
["Non-free_media_data"] = 9800,
["Non-free_media_rationale"] = 11000,
["Non-free_movie_poster"] = 22000,
["Non-free_newspaper_image"] = 2000,
["Non-free_poster"] = 80000,
["Non-free_promotional"] = 8800,
["Non-free_school_logo"] = 2400,
["Non-free_seal"] = 4400,
["Non-free_symbol"] = 6100,
["Non-free_television_screenshot"] = 16000,
["Non-free_title-card"] = 5600,
["Non-free_use_rationale"] = 461000,
["Non-free_use_rationale/styles.css"] = 680000,
["Non-free_use_rationale_2"] = 211000,
["Non-free_use_rationale_album_cover"] = 134000,
["Non-free_use_rationale_book_cover"] = 19000,
["Non-free_use_rationale_logo"] = 94000,
["Non-free_use_rationale_poster"] = 51000,
["Non-free_use_rationale_title-card"] = 2700,
["Non-free_use_rationale_video_cover"] = 5800,
["Non-free_use_rationale_video_game_cover"] = 10000,
["Non-free_video_cover"] = 16000,
["Non-free_video_game_cover"] = 21000,
["Non-free_video_game_cover/platform"] = 21000,
["Non-free_video_game_screenshot"] = 10000,
["Non-free_video_game_screenshot/platform"] = 9600,
["Non-free_with_NC"] = 2700,
["Non-free_with_permission"] = 2100,
["Nonspecific"] = 2200,
["Nonumtoc"] = 2700,
["Nonumtoc/styles.css"] = 2700,
["Noping"] = 366000,
["Noprint"] = 2900,
["Noredirect"] = 8300,
["Normal"] = 5900,
["Normalwraplink"] = 3500,
["NorthAmNative"] = 2000,
["North_America_topic"] = 3500,
["Northern_Ireland_tasks"] = 19000,
["Nospam"] = 20000,
["Not-PD-US-expired-min-year"] = 26000,
["Not_a_ballot"] = 7700,
["Not_a_forum"] = 7700,
["Not_a_typo"] = 11000,
["Not_around"] = 2900,
["Not_done"] = 20000,
["Notability"] = 63000,
["Notavote"] = 2100,
["Notdone"] = 5500,
["Note"] = 25000,
["NoteFoot"] = 3900,
["NoteTag"] = 3900,
["Note_label"] = 9000,
["Notelist"] = 183000,
["Notelist-lr"] = 3500,
["Notelist-ua"] = 6700,
["Notes"] = 6500,
["Noteslist"] = 3600,
["Notice"] = 113000,
["NovelsWikiProject"] = 19000,
["Nowiki_="] = 2300,
["Nowrap"] = 835000,
["Np"] = 2900,
["Npby"] = 2500,
["Nq"] = 3700,
["Nrut"] = 3600,
["Ns"] = 2600,
["Ns0"] = 107000,
["Ns_has_subpages"] = 2170000,
["Nts"] = 20000,
["Ntsh"] = 3300,
["Number_of_defined_parameters"] = 4800,
["Number_table_sorting"] = 34000,
["Number_table_sorting_hidden"] = 3300,
["Numero"] = 3500,
["Nutshell"] = 3900,
["Nw="] = 2300,
["Module:NUMBEROFSECTIONS"] = 4700,
["Module:Namespace_detect"] = 15900000,
["Module:Namespace_detect/config"] = 17000000,
["Module:Namespace_detect/data"] = 17000000,
["Module:National_squad"] = 54000,
["Module:Native_name"] = 91000,
["Module:Navbar"] = 5420000,
["Module:Navbar/configuration"] = 5420000,
["Module:Navbar/styles.css"] = 4770000,
["Module:Navbox"] = 4430000,
["Module:Navbox/configuration"] = 4430000,
["Module:Navbox/styles.css"] = 4430000,
["Module:Navbox_ice_hockey"] = 3100,
["Module:Navbox_top_and_bottom"] = 15000,
["Module:Navbox_with_collapsible_groups"] = 139000,
["Module:Navboxes"] = 55000,
["Module:Navseasoncats"] = 479000,
["Module:Nihongo"] = 104000,
["Module:No_ping"] = 447000,
["Module:Noinclude"] = 734000,
["Module:Ns_has_subpages"] = 2170000,
["Module:Number_table_sorting"] = 37000,
}
39e43b2f7d7c960b9c86edd925fdfb685468d0e6
Main Page
0
1
1
2023-06-05T20:43:33Z
MediaWiki default
1
Create main page
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
This Main Page was created automatically and it seems it hasn't been replaced yet.
=== For the bureaucrat(s) of this wiki ===
Hello, and welcome to your new wiki! Thank you for choosing Miraheze for the hosting of your wiki, we hope you will enjoy our hosting.
You can immediately start working on your wiki or whenever you want.
Need help? No problem! We will help you with your wiki as needed. To start, try checking out these helpful links:
* [[mw:Special:MyLanguage/Help:Contents|MediaWiki guide]] (e.g. navigation, editing, deleting pages, blocking users)
* [[meta:Special:MyLanguage/FAQ|Miraheze FAQ]]
* [[meta:Special:MyLanguage/Request features|Request settings changes on your wiki]]. (Extensions, Skin and Logo/Favicon changes should be done through [[Special:ManageWiki]] on your wiki, see [[meta:Special:MyLanguage/ManageWiki|ManageWiki]] for more information.)
==== I still don't understand X! ====
Well, that's no problem. Even if something isn't explained in the documentation/FAQ, we are still happy to help you. You can find us here:
* [[meta:Special:MyLanguage/Help center|On our own Miraheze wiki]]
* On [[phab:|Phabricator]]
* On [https://miraheze.org/discord Discord]
* On IRC in #miraheze on irc.libera.chat ([irc://irc.libera.chat/%23miraheze direct link]; [https://web.libera.chat/?channel=#miraheze webchat])
=== For visitors of this wiki ===
Hello, the default Main Page of this wiki (this page) has not yet been replaced by the bureaucrat(s) of this wiki. The bureaucrat(s) might still be working on a Main Page, so please check again later!
21236ac3f8d65e5563b6da6b70815ca6bf1e6616
Template:Infobox character
10
2
3
2
2023-06-05T21:30:50Z
Otonashi Ayana
2
1 revision imported
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{{name}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = [[File:{{{image}}}|x350px]]
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{firstAppearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
<pre>
{{infobox character
| name = {{PAGENAME}}
| jname =
| image =
| aka =
| gender =
| age =
| firstAppearance =
| seiyu =
| relations =
}}</pre>
73810c458f02cc86aa3dfad3221d8354e30dc4e8
14
3
2023-06-05T21:38:55Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{{name}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = [[File:{{{image}}}|x350px]]
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
<pre>
{{infobox character
| name = {{PAGENAME}}
| jname =
| image =
| aka =
| gender =
| age =
| appearance =
| seiyu =
| relations =
}}</pre>
6037bdf234857f4bfa07abd4da5ee9aa6c82927b
Template:Infobox
10
3
5
4
2023-06-05T21:30:51Z
Otonashi Ayana
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go in the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
817a9f5b6524eced06a57bd1d5fd7179f9369bf2
Template:Template other
10
4
7
6
2023-06-05T21:30:51Z
Otonashi Ayana
2
1 revision imported
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
| template
| other
}}
}}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
06fb13d264df967b5232141067eb7d2b67372d76
Module:Infobox
828
5
9
8
2023-06-05T21:30:52Z
Otonashi Ayana
2
1 revision imported
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end
local function fixChildBoxes(sval, tt)
local function notempty( s ) return s and s:match( '%S' ) end
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:addClass('infobox-label')
-- @deprecated next; target .infobox-<name> .infobox-label
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
end
local dataCell = row:tag('td')
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:addClass(rowArgs.class)
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
local function renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
})
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(require('Module:Italic title')._main({}))
end
end
-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if args.decat == 'yes' then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local hlist_templatestyles = ''
if lists.hlist_t.found then
hlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present
-- and not blank, or we are processing "prefix1" and "prefix" is
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
0ddb7e5c8426d67cd589b710efb9912ddfb67fea
Module:Infobox/styles.css
828
6
11
10
2023-06-05T21:30:52Z
Otonashi Ayana
2
1 revision imported
text
text/plain
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
}
.infobox-3cols-child {
margin: auto;
}
.infobox .navbar {
font-size: 100%;
}
/* T281642 */
body.skin-minerva .infobox-header,
body.skin-minerva .infobox-subheader,
body.skin-minerva .infobox-above,
body.skin-minerva .infobox-title,
body.skin-minerva .infobox-image,
body.skin-minerva .infobox-full-data,
body.skin-minerva .infobox-below {
text-align: center;
}
@media screen and (max-width:840px){
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
/* @noflip */
margin-left: auto;
margin-right:auto;
padding: 0.2em;
margin-bottom:1em;
}
.infobox-image{
text-align:center;
}
}
96007587f0b8d711d3fb79a06ec4a51c7eeb4007
12
11
2023-06-05T21:34:22Z
Otonashi Ayana
2
Otonashi Ayana changed the content model of the page [[Module:Infobox/styles.css]] from "plain text" to "Sanitized CSS"
sanitized-css
text/css
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
}
.infobox-3cols-child {
margin: auto;
}
.infobox .navbar {
font-size: 100%;
}
/* T281642 */
body.skin-minerva .infobox-header,
body.skin-minerva .infobox-subheader,
body.skin-minerva .infobox-above,
body.skin-minerva .infobox-title,
body.skin-minerva .infobox-image,
body.skin-minerva .infobox-full-data,
body.skin-minerva .infobox-below {
text-align: center;
}
@media screen and (max-width:840px){
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
/* @noflip */
margin-left: auto;
margin-right:auto;
padding: 0.2em;
margin-bottom:1em;
}
.infobox-image{
text-align:center;
}
}
96007587f0b8d711d3fb79a06ec4a51c7eeb4007
MediaWiki:Common.css
8
7
13
2023-06-05T21:35:57Z
Otonashi Ayana
2
Created page with "/* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for..."
css
text/css
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
db112051df4a651c718e6bb55829dc832e41d60f
Template:Plainlist
10
8
16
15
2023-06-05T21:41:48Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Plainlist]]
wikitext
text/x-wiki
<templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}">{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
8ca89b36606f7babc854ca4f296b3cea3e358a07
Template:Pagelang
10
9
18
17
2023-06-05T21:41:49Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Pagelang]]
wikitext
text/x-wiki
{{#ifeq:{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}|en
|{{#ifeq:{{#titleparts:{{{1|{{PAGENAME}}}}}||-1}}|en
|{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}
}}
|{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
c4102d40356283246cbc855bef4754c0a15b4bea
Module:Template translation
828
10
20
19
2023-06-05T21:41:49Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Template_translation]]
Scribunto
text/plain
local this = {}
function this.checkLanguage(subpage, default)
--[[Check first if there's an any invalid character that would cause the
mw.language.isKnownLanguageTag function() to throw an exception:
- all ASCII controls in [\000-\031\127],
- double quote ("), sharp sign (#), ampersand (&), apostrophe ('),
- slash (/), colon (:), semicolon (;), lower than (<), greater than (>),
- brackets and braces ([, ], {, }), pipe (|), backslash (\\)
All other characters are accepted, including space and all non-ASCII
characters (including \192, which is invalid in UTF-8).
--]]
if mw.language.isValidCode(subpage) and mw.language.isKnownLanguageTag(subpage)
--[[However "SupportedLanguages" are too restrictive, as they discard many
valid BCP47 script variants (only because MediaWiki still does not
define automatic transliterators for them, e.g. "en-dsrt" or
"fr-brai" for French transliteration in Braille), and country variants,
(useful in localized data, even if they are no longer used for
translations, such as zh-cn, also useful for legacy codes).
We want to avoid matching subpagenames containing any uppercase letter,
(even if they are considered valid in BCP 47, in which they are
case-insensitive; they are not "SupportedLanguages" for MediaWiki, so
they are not "KnownLanguageTags" for MediaWiki).
To be more restrictive, we exclude any character
* that is not ASCII and not a lowercase letter, minus-hyphen, or digit,
or does not start by a letter or does not finish by a letter or digit;
* or that has more than 8 characters between hyphens;
* or that has two hyphens;
* or with specific uses in template subpages and unusable as languages.
--]]
or string.find(subpage, "^[%l][%-%d%l]*[%d%l]$") ~= nil
and string.find(subpage, "[%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l]") == nil
and string.find(subpage, "%-%-") == nil
and subpage ~= "doc"
and subpage ~= "layout"
and subpage ~= "sandbox"
and subpage ~= "testcases"
and subpage ~= "init"
and subpage ~= "preload"
and subpage ~= "subpage"
and subpage ~= "subpage2"
and subpage ~= "sub-subpage"
and subpage ~= "sub-sub-subpage"
and subpage ~= "sub-sub-sub-subpage"
then
return subpage
end
-- Otherwise there's currently no known language subpage
return default
end
--[[Get the last subpage of an arbitrary page if it is a translation.
To be used from templates.
]]
function this.getLanguageSubpage(frame)
local title = frame and frame.args[1]
if not title or title == '' then
title = mw.title.getCurrentTitle()
end
return this._getLanguageSubpage(title)
end
--[[Get the last subpage of an arbitrary page if it is a translation.
To be used from Lua.
]]
function this._getLanguageSubpage(title)
if type(title) == 'string' then
title = mw.title.new(title)
end
if not title then
-- invalid title
return mw.language.getContentLanguage():getCode()
end
--[[This code does not work in all namespaces where the Translate tool works.
-- It works in the main namespace on Meta because it allows subpages there
-- It would not work in the main namespace of English Wikipedia (but the
-- articles are monolignual on that wiki).
-- On Meta-Wiki the main space uses subpages and its pages are translated.
-- The Translate tool allows translatng pages in all namespaces, even if
-- the namespace officially does not have subpages.
-- On Meta-Wiki the Category namespace still does not have subpages enabled,
-- even if they would be very useful for categorizing templates, that DO have
-- subpages (for documentatio and tstboxes pages). This is a misconfiguration
-- bug of Meta-Wiki. The work-around is to split the full title and then
-- get the last titlepart.
local subpage = title.subpageText
--]]
local titleparts = mw.text.split(title.fullText, '/')
local subpage = titleparts[#titleparts]
return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
end
--[[Get the last subpage of the current page if it is a translation.
]]
function this.getCurrentLanguageSubpage()
return this._getLanguageSubpage(mw.title.getCurrentTitle())
end
--[[Get the first part of the language code of the subpage, before the '-'.
]]
function this.getMainLanguageSubpage()
parts = mw.text.split( this.getCurrentLanguageSubpage(), '-' )
return parts[1]
end
--[[Get the last subpage of the current frame if it is a translation.
Not used locally.
]]
function this.getFrameLanguageSubpage(frame)
return this._getLanguageSubpage(frame:getParent():getTitle())
end
--[[Get the language of the current page.
Not used locally.
]]
function this.getLanguage()
local subpage = mw.title.getCurrentTitle().subpageText
return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
end
--[[Get the language of the current frame.
Not used locally.
]]
function this.getFrameLanguage(frame)
local titleparts = mw.text.split(frame:getParent():getTitle(), '/')
local subpage = titleparts[#titleparts]
return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
end
function this.title(namespace, basepagename, subpage)
local message, title
local pagename = basepagename
if (subpage or '') ~= ''
then
pagename = pagename .. '/' .. subpage
end
local valid, title = xpcall(function()
return mw.title.new(pagename, namespace) -- costly
end, function(msg) -- catch undocumented exception (!?)
-- thrown when namespace does not exist. The doc still
-- says it should return a title, even in that case...
message = msg
end)
if valid and title ~= nil and (title.id or 0) ~= 0
then
return title
end
return { -- "pseudo" mw.title object with id = nil in case of error
prefixedText = pagename, -- the only property we need below
message = message -- only for debugging
}
end
--[[If on a translation subpage (like Foobar/de), this function returns
a given template in the same language, if the translation is available.
Otherwise, the template is returned in its default language, without
modification.
This is aimed at replacing the current implementation of Template:TNTN.
This version does not expand the returned template name: this solves the
problem of self-recursion in TNT when translatable templates need themselves
to transclude other translable templates (such as Tnavbar).
]]
function this.getTranslatedTemplate(frame, withStatus)
local args = frame.args
local pagename = args['template']
--[[Check whether the pagename is actually in the Template namespace, or
if we're transcluding a main-namespace page.
(added for backward compatibility of Template:TNT)
]]
local title
local namespace = args['tntns'] or ''
if (namespace ~= '') -- Checks for tntns parameter for custom ns.
then
title = this.title(namespace, pagename) -- Costly
else -- Supposes that set page is in ns10.
namespace = 'Template'
title = this.title(namespace, pagename) -- Costly
if title.id == nil
then -- not found in the Template namespace, assume the main namespace (for backward compatibility)
namespace = ''
title = this.title(namespace, pagename) -- Costly
end
end
-- Get the last subpage and check if it matches a known language code.
local subpage = args['uselang'] or ''
if (subpage == '')
then
subpage = this.getCurrentLanguageSubpage()
end
if (subpage == '')
then
-- Check if a translation of the pagename exists in English
local newtitle = this.title(namespace, pagename, 'en') -- Costly
-- Use the translation when it exists
if newtitle.id ~= nil
then
title = newtitle
end
else
-- Check if a translation of the pagename exists in that language
local newtitle = this.title(namespace, pagename, subpage) -- Costly
if newtitle.id == nil
then
-- Check if a translation of the pagename exists in English
newtitle = this.title(namespace, pagename, 'en') -- Costly
end
-- Use the translation when it exists
if newtitle.id ~= nil
then
title = newtitle
end
end
-- At this point the title should exist
if withStatus then
-- status returned to Lua function below
return title.prefixedText, title.id ~= nil
else
-- returned directly to MediaWiki
return title.prefixedText
end
end
--[[If on a translation subpage (like Foobar/de), this function renders
a given template in the same language, if the translation is available.
Otherwise, the template is rendered in its default language, without
modification.
This is aimed at replacing the current implementation of Template:TNT.
Note that translatable templates cannot transclude themselves other
translatable templates, as it will recurse on TNT. Use TNTN instead
to return only the effective template name to expand externally, with
template parameters also provided externally.
]]
function this.renderTranslatedTemplate(frame)
local title, found = this.getTranslatedTemplate(frame, true)
-- At this point the title should exist prior to performing the expansion
-- of the template, otherwise render a red link to the missing page
-- (resolved in its assumed namespace). If we don't tet this here, a
-- script error would be thrown. Returning a red link is consistant with
-- MediaWiki behavior when attempting to transclude inexistant templates.
if not found then
return '[[' .. title .. ']]'
end
-- Copy args pseudo-table to a proper table so we can feed it to expandTemplate.
-- Then render the pagename.
local args = frame.args
local pargs = (frame:getParent() or {}).args
local arguments = {}
if (args['noshift'] or '') == ''
then
for k, v in pairs(pargs) do
-- numbered args >= 1 need to be shifted
local n = tonumber(k) or 0
if (n > 0)
then
if (n >= 2)
then
arguments[n - 1] = v
end
else
arguments[k] = v
end
end
else -- special case where TNT is used as autotranslate
-- (don't shift again what is shifted in the invokation)
for k, v in pairs(pargs) do
arguments[k] = v
end
end
arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded
arguments['tntns'] = nil -- discard the specified namespace override
arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame
arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame
return frame:expandTemplate{title = ':' .. title, args = arguments}
end
--[[A helper for mocking TNT in Special:TemplateSandbox. TNT breaks
TemplateSandbox; mocking it with this method means templates won't be
localized but at least TemplateSandbox substitutions will work properly.
Won't work with complex uses.
]]
function this.mockTNT(frame)
local pargs = (frame:getParent() or {}).args
local arguments = {}
for k, v in pairs(pargs) do
-- numbered args >= 1 need to be shifted
local n = tonumber(k) or 0
if (n > 0)
then
if (n >= 2)
then
arguments[n - 1] = v
end
else
arguments[k] = v
end
end
if not pargs[1]
then
return ''
end
return frame:expandTemplate{title = 'Template:' .. pargs[1], args = arguments}
end
return this
d8b891aad5c405bb237bd0a79d564ccb6b8e946b
Module:Message box
828
11
22
21
2023-06-05T21:41:50Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Message_box]]
Scribunto
text/plain
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
fcf2586b774e6db72e0a2837019f5b445124ddc4
Module:Yesno
828
12
24
23
2023-06-05T21:41:50Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Yesno]]
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
Module:Arguments
828
13
26
25
2023-06-05T21:41:51Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Arguments]]
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Module:Message box/configuration
828
14
28
27
2023-06-05T21:41:51Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Message_box/configuration]]
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ambox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'plainlinks', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = nil,
templateErrorParamsToCheck = {'issue', 'fix', 'subst'}
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'cmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'cmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
caution = {
class = 'cmbox-style',
image = 'Ambox warning yellow.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'cmbox'},
imageEmptyCell = true
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'OOjs UI icon clock-destructive.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'OOjs UI icon information-progressive.svg'
},
system = {
class = 'fmbox-system',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'plainlinks', 'fmbox'},
imageEmptyCell = false,
imageRightNone = false
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'imbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'imbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox license.png' -- @todo We need an SVG version of this
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg'
},
notice = {
class = 'imbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
usePlainlinksParam = true,
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ombox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
critical = {
class = 'mbox-critical',
image = 'OOjs UI icon clock-destructive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'tmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'tmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
imageEmptyCellStyle = true,
templateCategory = 'Talk message boxes'
}
}
d8cf419a57983f67944903d17535c0ee0780ceb6
Template:Documentation
10
15
30
29
2023-06-05T21:41:51Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Documentation]]
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude>
{{documentation|content=
{{Lua|Module:Documentation}}
<translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate>
<translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate>
<translate>
==Usage== <!--T:2-->
===Customizing display=== <!--T:3-->
<!--T:4-->
Overrides exist to customize the output in special cases:
</translate>
* <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate>
<translate>
==Rationale== <!--T:6-->
</translate>
<translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate>
<translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate>
<translate>
==See also== <!--T:9-->
</translate>
* <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate>
* {{tim|Documentation}}
* <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate>
}}
[[Category:Formatting templates{{#translation:}}|Template documentation]]
[[Category:Template documentation{{#translation:}}| ]]
</noinclude><includeonly>{{#if:{{{content|}}}|
[[Category:Template documentation pages{{#translation:}}]]
}}</includeonly>
e9a25c87d40f5882dd425c83ed4d3be628082f3c
Template:Documentation/en
10
16
32
31
2023-06-05T21:41:51Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Documentation/en]]
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude>
{{documentation|content=
{{Lua|Module:Documentation}}
This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.
It is intended for pages which are [[Special:MyLanguage/Help:Transclusion|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.
==Usage==
===Customizing display===
Overrides exist to customize the output in special cases:
* <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - change the text of the "documentation" heading. If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.
==Rationale==
This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.
It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[:en:Special:Diff/69888944|developer's explanation]]).
==See also==
* [[w:Template:Documentation subpage]]
* {{tim|Documentation}}
* [[w:Wikipedia:Template documentation]]
}}
[[Category:Formatting templates{{#translation:}}|Template documentation]]
[[Category:Template documentation{{#translation:}}| ]]
</noinclude><includeonly>{{#if:{{{content|}}}|
[[Category:Template documentation pages{{#translation:}}]]
}}</includeonly>
ea09a0702078c03b055fa66d2628126da3e3c062
Template:Uses TemplateStyles
10
17
34
33
2023-06-05T21:41:52Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Uses_TemplateStyles]]
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#invoke:Uses TemplateStyles|main}}</includeonly></onlyinclude>
{{Uses TemplateStyles|Template:Uses TemplateStyles/example.css|nocat=true}}
{{documentation}}
91689f58ed39c0b53e3fadf3edb76166ba33a964
Template:Documentation subpage
10
18
36
35
2023-06-05T21:41:52Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Documentation_subpage]]
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude>{{#switch:<translate></translate>
| =
<includeonly><!--
-->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]]
| text =
'''<translate><!--T:4--> This is a [[w:Wikipedia:Template documentation|documentation]] [[<tvar name=2>Special:MyLanguage/Help:Subpages</tvar>|subpage]] for <tvar name=1>{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}</tvar>.</translate>'''<br /><!--
-->{{#if:{{{text2|}}}{{{text1|}}}
|<translate><!--T:5--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{{text2|{{{text1}}}}}}</tvar>.</translate>
|<translate><!--T:10--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{SUBJECTSPACE}}</tvar> page.</translate>
}}
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}}
| Template | Project = Template
| Module = Module
| User = User
| #default = MediaWiki
}} documentation pages{{#translation:}}]]
| [[Category:Documentation subpages without corresponding pages{{#translation:}}]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{Documentation|content=
<translate>
== Usage == <!--T:6-->
<!--T:7-->
Use this template on Template Documentation subpage (/doc).
== See also == <!--T:8-->
</translate>
*{{tl|Documentation}}
*{{tl|tl}}
}}
</noinclude>
0d6a10a903dbd572fffeb01aff5983d9b3abc65c
Template:Documentation subpage/en
10
19
38
37
2023-06-05T21:41:52Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Documentation_subpage/en]]
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude>{{#switch:
| =
<includeonly><!--
-->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]]
| text =
'''This is a [[w:Wikipedia:Template documentation|documentation]] [[Special:MyLanguage/Help:Subpages|subpage]] for {{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}.'''<br /><!--
-->{{#if:{{{text2|}}}{{{text1|}}}
|It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{{text2|{{{text1}}}}}}.
|It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{SUBJECTSPACE}} page.
}}
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}}
| Template | Project = Template
| Module = Module
| User = User
| #default = MediaWiki
}} documentation pages{{#translation:}}]]
| [[Category:Documentation subpages without corresponding pages{{#translation:}}]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{Documentation|content=
== Usage ==
Use this template on Template Documentation subpage (/doc).
== See also ==
*{{tl|Documentation}}
*{{tl|tl}}
}}
</noinclude>
7ed5cbfd5118b37933b2c38487c1ab00f969bf46
Template:IsDocSubpage
10
20
40
39
2023-06-05T21:41:53Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:IsDocSubpage]]
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#ifexpr: (
{{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{override|doc}}}}}|1|0}} or (
{{#ifeq:{{lc:{{#titleparts:{{FULLPAGENAME}}|-1|-2}}}}|{{lc:{{{override|doc}}}}}|1|0}}
and {{#if:{{#translation:}}|1|0}}
)
)<!--
-->|{{{true|1}}}<!--
-->|{{{false|}}}<!--
-->}}</includeonly></onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
47b5d5a2fb89240a721f8874924170f791de93b2
Template:TemplateData header
10
21
42
41
2023-06-05T21:41:55Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:TemplateData_header]]
wikitext
text/x-wiki
<noinclude>
<languages/>
<onlyinclude>{{#switch:<translate></translate>
|=
<div class="templatedata-header"><!--
-->{{#if:{{yesno|{{{editlinks|}}}}}<!--
-->|{{#ifexpr:<!--
-->{{#if:{{{docpage|}}}<!--
-->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!--
-->|not{{IsDocSubpage|false=0}}<!--
-->}}<!--
-->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!--
-->}}<!--
-->}}
{{#if:{{{noheader|}}}||<translate><!--T:1--> This is the [[<tvar name=1>Special:MyLanguage/Help:TemplateData</tvar>|TemplateData]] documentation for this template used by [[<tvar name=2>Special:MyLanguage/VisualEditor</tvar>|VisualEditor]] and other tools.</translate>}}
'''{{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!--
-->|{{#if:{{IsDocSubpage|false=}}<!--
-->|[[Category:TemplateData documentation{{#translation:}}]]<!--
-->|[[Category:Templates using TemplateData{{#translation:}}]]<!--
-->}}<!--
-->}}</includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}}
}}</onlyinclude>
{{Documentation|content=
Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]].
== Usage ==
{{#tag:syntaxhighlight|
==TemplateData== or ==Parameters== or ==Usage==
{{((}}TemplateData header{{))}}
{{^(}}templatedata{{)^}}{
...
}{{^(}}/templatedata{{)^}}
|lang=html
}}
Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]].
<dl><dd>
{{TemplateData header|Template name}}
</dd></dl>
Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text.
<dl><dd>
{{TemplateData header|noheader=1}}
</dd></dl>
==Parameters==
{{TemplateData header/doc}}
}}
</noinclude>
adcf50c8d3c870a44b190116c53a975926dc17d8
Template:TemplateData header/en
10
22
44
43
2023-06-05T21:41:55Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:TemplateData_header/en]]
wikitext
text/x-wiki
<noinclude>
<languages/>
<onlyinclude>{{#switch:
|=
<div class="templatedata-header"><!--
-->{{#if:{{yesno|{{{editlinks|}}}}}<!--
-->|{{#ifexpr:<!--
-->{{#if:{{{docpage|}}}<!--
-->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!--
-->|not{{IsDocSubpage|false=0}}<!--
-->}}<!--
-->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!--
-->}}<!--
-->}}
{{#if:{{{noheader|}}}||This is the [[Special:MyLanguage/Help:TemplateData|TemplateData]] documentation for this template used by [[Special:MyLanguage/VisualEditor|VisualEditor]] and other tools.}}
'''{{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!--
-->|{{#if:{{IsDocSubpage|false=}}<!--
-->|[[Category:TemplateData documentation{{#translation:}}]]<!--
-->|[[Category:Templates using TemplateData{{#translation:}}]]<!--
-->}}<!--
-->}}</includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}}
}}</onlyinclude>
{{Documentation|content=
Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]].
== Usage ==
{{#tag:syntaxhighlight|
==TemplateData== or ==Parameters== or ==Usage==
{{((}}TemplateData header{{))}}
{{^(}}templatedata{{)^}}{
...
}{{^(}}/templatedata{{)^}}
|lang=html
}}
Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]].
<dl><dd>
{{TemplateData header|Template name}}
</dd></dl>
Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text.
<dl><dd>
{{TemplateData header|noheader=1}}
</dd></dl>
==Parameters==
{{TemplateData header/doc}}
}}
</noinclude>
dce30fc2e3f9848db82a3e0290f65f2d61e1c5ed
Template:Yesno
10
23
46
45
2023-06-05T21:41:55Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Yesno]]
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|false
|0 = {{{no|<!-- null -->}}}
| = {{{blank|{{{no|<!-- null -->}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|true
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
166fab9e5411aacd02ca4c9e93fbc7bf6bcf26ac
Template:Sandbox other
10
24
48
47
2023-06-05T21:41:56Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Sandbox_other]]
wikitext
text/x-wiki
<onlyinclude>{{#switch:{{SUBPAGENAME}}|sandbox|doc={{{1|}}}|#default={{{2|}}}}}</onlyinclude>
{{documentation}}
44919af6b57ac865d8ec53eabfcb2cb9de35f157
Module:Documentation
828
25
50
49
2023-06-05T21:41:56Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Documentation]]
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local i18n = mw.loadData('Module:Documentation/i18n')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4)
end
local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
return ret
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Load TemplateStyles
----------------------------------------------------------------------------
p.main = function(frame)
local parent = frame.getParent(frame)
local output = p._main(parent.args)
return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output
end
----------------------------------------------------------------------------
-- Main function
----------------------------------------------------------------------------
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--
-- Messages:
-- 'main-div-id' --> 'template-documentation'
-- 'main-div-classes' --> 'template-documentation iezoomfix'
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
-- This div tag is from {{documentation/start box}}, but moving it here
-- so that we don't have to worry about unclosed tags.
:tag('div')
:attr('id', message('main-div-id'))
:addClass(message('main-div-class'))
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:done()
:wikitext(p._endBox(args, env))
:wikitext(p.addTrackingCategories(env))
return tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title objects and other namespace- or
-- path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
-- env.printTitle - the print version of the template, located at the /Print subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.printTitle()
--[[
-- Title object for the /Print subpage.
-- Messages:
-- 'print-subpage' --> 'Print'
--]]
return env.templateTitle:subPageTitle(message('print-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the same as the
-- subject namespace. However, pages in the Article, File, MediaWiki or Category
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local frame = mw.getCurrentFrame()
local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed.
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if isPreviewing or not compareUrl then
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
else
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
text = text .. makeCategoryLink(message('sandbox-category'))
omargs.text = text
omargs.class = message('sandbox-class')
local ret = '<div style="clear: both;"></div>'
ret = ret .. messageBox.main('ombox', omargs)
return ret
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local title = env.title
local protectionLevels
local protectionTemplate = message('protection-template')
local namespace = title.namespace
if not (protectionTemplate and (namespace == 10 or namespace == 828)) then
-- Don't display the protection template if we are not in the template or module namespaces.
return nil
end
protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editLevels = protectionLevels.edit
local moveLevels = protectionLevels.move
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then
-- The page is full-move protected, or full, template, or semi-protected.
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = i18n['view-link-display']
data.editLinkDisplay = i18n['edit-link-display']
data.historyLinkDisplay = i18n['history-link-display']
data.purgeLinkDisplay = i18n['purge-link-display']
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 6 then -- File namespace
preload = message('file-docpage-preload')
elseif subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = i18n['create-link-display']
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities.
s = s:gsub('%]', ']')
return s
end
local ret
local docTitle = data.docTitle
local title = data.title
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
-- 'start-box-link-id' --> 'doc_editlinks'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = i18n['template-namespace-heading']
elseif subjectSpace == 828 then -- Module namespace
data.heading = i18n['module-namespace-heading']
elseif subjectSpace == 6 then -- File namespace
data.heading = i18n['file-namespace-heading']
else
data.heading = i18n['other-namespaces-heading']
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
data.linksClass = message('start-box-linkclasses')
data.linksId = message('start-box-link-id')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
:addClass(message('header-div-class'))
:tag('div')
:addClass(message('heading-div-class'))
:wikitext(data.heading)
local links = data.links
if links then
sbox
:tag('div')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
local cbox = mw.html.create('div')
cbox
:addClass(message('content-div-class'))
:wikitext('\n' .. (content or '') .. '\n')
return tostring(cbox)
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the footer text field.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '')
text = text .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.
if printBlurb then
text = text .. '<br />' .. printBlurb
end
end
end
local ebox = mw.html.create('div')
ebox
:addClass(message('footer-div-class'))
:wikitext(text)
return tostring(ebox)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[w:Wikipedia:Template documentation|documentation]]
-- is [[w:Wikipedia:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle or args.content then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = i18n['edit-link-display']
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = i18n['history-link-display']
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = i18n['create-link-display']
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
function p.makePrintBlurb(args, env)
--[=[
-- Generates the blurb displayed when there is a print version of the template available.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'print-link-display' --> '/Print'
-- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]'
-- .. ' of this template exists at $1.'
-- .. ' If you make a change to this template, please update the print version as well.'
-- 'display-print-category' --> true
-- 'print-category' --> 'Templates with print versions'
--]=]
local printTitle = env.printTitle
if not printTitle then
return nil
end
local ret
if printTitle.exists then
local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))
ret = message('print-blurb', {printLink})
local displayPrintCategory = message('display-print-category', nil, 'boolean')
if displayPrintCategory then
ret = ret .. makeCategoryLink(message('print-category'))
end
end
return ret
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
0e23eec0d3c20c23afcd28849e240b9083dbcf88
Module:Documentation/config
828
26
52
51
2023-06-05T21:41:57Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Documentation/config]]
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local _format = require('Module:TNT').format
local function format(id)
return _format('I18n/Documentation', id)
end
local cfg = {} -- Do not edit this line.
cfg['templatestyles-scr'] = 'Module:Documentation/styles.css'
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-template']
-- The name of the template that displays the protection icon (a padlock on enwiki).
cfg['protection-template'] = 'pp-template'
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
-- cfg['protection-template-args']
-- Any arguments to send to the protection template. This should be a Lua table.
-- For example, if the protection template is "pp-template", and the wikitext template invocation
-- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}".
--]]
cfg['protection-template-args'] = {docusage = 'yes'}
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template')
cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module')
cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other')
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb')
cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb')
cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display')
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb')
cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display')
cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb')
cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display')
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = format('transcluded-from-blurb')
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = format('create-module-doc-blurb')
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = format('experiment-blurb-template')
cfg['experiment-blurb-module'] = format('experiment-blurb-module')
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = format('sandbox-link-display')
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display')
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = format('sandbox-create-link-display')
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = format('compare-link-display')
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = format('mirror-link-display')
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = format('testcases-link-display')
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = format('testcases-edit-link-display')
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = format('testcases-create-link-display')
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = format('add-categories-blurb')
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = format('subpages-blurb')
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = format('subpages-link-display')
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = format('template-pagetype')
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = format('module-pagetype')
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = format('default-pagetype')
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['file-docpage-preload']
-- Preload file for documentation page in the file namespace.
cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- Print version configuration
----------------------------------------------------------------------------------------------------
-- cfg['print-subpage']
-- The name of the template subpage used for print versions.
cfg['print-subpage'] = 'Print'
-- cfg['print-link-display']
-- The text to display when linking to the /Print subpage.
cfg['print-link-display'] = '/Print'
-- cfg['print-blurb']
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display'].
cfg['print-blurb'] = format('print-blurb')
-- cfg['display-print-category']
-- Set to true to enable output of cfg['print-category'] if a /Print subpage exists.
-- This should be a boolean value (either true or false).
cfg['display-print-category'] = true
-- cfg['print-category']
-- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists.
cfg['print-category'] = 'Templates with print versions'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['main-div-id']
-- The "id" attribute of the main HTML "div" tag.
cfg['main-div-id'] = 'template-documentation'
-- cfg['main-div-classes']
-- The CSS classes added to the main HTML "div" tag.
cfg['main-div-class'] = 'ts-doc-doc'
cfg['header-div-class'] = 'ts-doc-header'
cfg['heading-div-class'] = 'ts-doc-heading'
cfg['content-div-class'] = 'ts-doc-content'
cfg['footer-div-class'] = 'ts-doc-footer plainlinks'
cfg['sandbox-class'] = 'ts-doc-sandbox'
-- cfg['start-box-linkclasses']
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.
cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks'
-- cfg['start-box-link-id']
-- The HTML "id" attribute for the links in the start box.
cfg['start-box-link-id'] = 'doc_editlinks'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = false
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
224f3664a83268936f1b9935eafc0055a97071ac
Module:TNT
828
27
54
53
2023-06-05T21:41:57Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:TNT]]
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
params[k - 2] = mw.text.trim(v)
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
function p.getTemplateData(dataset)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
local names = {}
for _, field in ipairs(data.schema.fields) do
table.insert(names, field.name)
end
local numOnly = true
local params = {}
local paramOrder = {}
for _, row in ipairs(data.data) do
local newVal = {}
local name = nil
for pos, columnName in ipairs(names) do
if columnName == 'name' then
name = row[pos]
else
newVal[columnName] = row[pos]
end
end
if name then
if (
(type(name) ~= "number")
and (
(type(name) ~= "string")
or not string.match(name, "^%d+$")
)
) then
numOnly = false
end
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
if numOnly then
params['zzz123']=''
end
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description,
})
if numOnly then
json = string.gsub(json,'"zzz123":"",?', "")
end
return json
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error(string.format([['''Missing JsonConfig extension, or not properly configured;
Cannot load https://commons.wikimedia.org/wiki/Data:%s.
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset))
end
local data = mw.ext.data.get(dataset, lang)
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
e8ec673cd9d57a37a2bc326979c7980f1657fc3a
Module:Documentation/i18n
828
28
56
55
2023-06-05T21:41:57Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Documentation/i18n]]
Scribunto
text/plain
local format = require('Module:TNT').format
local i18n = {}
i18n['cfg-error-msg-type'] = format('I18n/Documentation', 'cfg-error-msg-type')
i18n['cfg-error-msg-empty'] = format('I18n/Documentation', 'cfg-error-msg-empty')
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
i18n['template-namespace-heading'] = format('I18n/Documentation', 'template-namespace-heading')
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
i18n['module-namespace-heading'] = format('I18n/Documentation', 'module-namespace-heading')
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
i18n['file-namespace-heading'] = format('I18n/Documentation', 'file-namespace-heading')
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
i18n['other-namespaces-heading'] = format('I18n/Documentation', 'other-namespaces-heading')
-- cfg['view-link-display']
-- The text to display for "view" links.
i18n['view-link-display'] = format('I18n/Documentation', 'view-link-display')
-- cfg['edit-link-display']
-- The text to display for "edit" links.
i18n['edit-link-display'] = format('I18n/Documentation', 'edit-link-display')
-- cfg['history-link-display']
-- The text to display for "history" links.
i18n['history-link-display'] = format('I18n/Documentation', 'history-link-display')
-- cfg['purge-link-display']
-- The text to display for "purge" links.
i18n['purge-link-display'] = format('I18n/Documentation', 'purge-link-display')
-- cfg['create-link-display']
-- The text to display for "create" links.
i18n['create-link-display'] = format('I18n/Documentation', 'create-link-display')
return i18n
9a9f234b177a424f1fc465eb25c484eff54905c0
Module:Uses TemplateStyles
828
29
58
57
2023-06-05T21:41:58Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Uses_TemplateStyles]]
Scribunto
text/plain
-- This module implements the {{Uses TemplateStyles}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')
local p = {}
local function format(msg, ...)
-- Content sourced from [[commons:Data:I18n/Uses TemplateStyles.tab]]
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end
local function getConfig()
return mw.loadData('Module:Uses TemplateStyles/config')
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args, cfg)
local tStyles = mTableTools.compressSparseArray(args)
local box = p.renderBox(tStyles)
local trackingCategories = p.renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
function p.renderBox(tStyles)
local boxArgs = {}
if #tStyles < 1 then
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
else
local cfg = getConfig()
local tStylesLinks = {}
for i, ts in ipairs(tStyles) do
local link = string.format('[[:%s]]', ts)
local sandboxLink = nil
local tsTitle = mw.title.new(ts)
if tsTitle and cfg['sandbox_title'] then
local tsSandboxTitle = mw.title.new(string.format(
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
if tsSandboxTitle and tsSandboxTitle.exists then
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
end
end
tStylesLinks[i] = sandboxLink or link
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = format(
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
'\n' .. tStylesList
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
return ''
end
local cfg = getConfig()
local cats = {}
-- Error category
if #tStyles < 1 and cfg['error_category'] then
cats[#cats + 1] = cfg['error_category']
end
-- TemplateStyles category
titleObj = titleObj or mw.title.getCurrentTitle()
if (titleObj.namespace == 10 or titleObj.namespace == 828)
and not cfg['subpage_blacklist'][titleObj.subpageText]
then
local category = args.category or cfg['default_category']
if category then
cats[#cats + 1] = category
end
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local addedLevelCat = false
local addedPadlockCat = false
for i, ts in ipairs(tStyles) do
local tsTitleObj = mw.title.new(ts)
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
if cfg['protection_conflict_category'] and tsProt ~= currentProt and not addedLevelCat then
addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
end
if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
local content = tsTitleObj:getContent()
if not content:find(cfg['padlock_pattern']) then
cats[#cats + 1] = cfg['missing_padlock_category']
addedPadlockCat = true
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
d8c03c62b4a547f8918259e8509680e55bda1c90
Module:List
828
30
60
59
2023-06-05T21:41:58Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:List]]
Scribunto
text/plain
-- This module outputs different kinds of lists. At the moment, bulleted,
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Flatlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for i, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create((
#data.classes > 0
or data.marginLeft
or data.style
) and 'div' or nil)
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for i, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
return p.renderList(data)
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame)
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
d701c0798e541793aa5ed1e9af50fc3b20548907
Module:TableTools
828
31
62
61
2023-06-05T21:41:59Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:TableTools]]
Scribunto
text/plain
--[[
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should --
-- not be called directly from #invoke. --
------------------------------------------------------------------------------------
--]]
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
--[[
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
--]]
function p.isPositiveInteger(v)
if type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity then
return true
else
return false
end
end
--[[
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a value can be a valid table key. Lua will
-- generate an error if a NaN is used as a table key.
------------------------------------------------------------------------------------
--]]
function p.isNan(v)
if type(v) == 'number' and tostring(v) == '-nan' then
return true
else
return false
end
end
--[[
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
--]]
function p.shallowClone(t)
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
--]]
function p.removeDuplicates(t)
checkType('removeDuplicates', 1, t, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for i, v in ipairs(t) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
--]]
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k, v in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will
-- return {1, 3, 6}.
------------------------------------------------------------------------------------
--]]
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
return s
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k, v in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like ("foo1", "bar1", "foo2", "baz2"), returns a table
-- of subtables in the format
-- { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }
-- Keys that don't end with an integer are stored in a subtable named "other".
-- The compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
--]]
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
--[[
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
--]]
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for k in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
else -- This will fail with table, boolean, function.
return item1 < item2
end
end
--[[
Returns a list of the keys in a table, sorted using either a default
comparison function or a custom keySort function.
]]
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, { 'function', 'boolean', 'nil' })
end
local list = {}
local index = 1
for key, value in pairs(t) do
list[index] = key
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(list, keySort)
end
return list
end
--[[
Iterates through a table, with the keys sorted using the keysToList function.
If there are only numerical keys, sparseIpairs is probably more efficient.
]]
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local list = p.keysToList(t, keySort, true)
local i = 0
return function()
i = i + 1
local key = list[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
--[[
Returns true if all keys in the table are consecutive integers starting at 1.
--]]
function p.isArray(t)
checkType("isArray", 1, t, "table")
local i = 0
for k, v in pairs(t) do
i = i + 1
if t[i] == nil then
return false
end
end
return true
end
-- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 }
function p.invert(array)
checkType("invert", 1, array, "table")
local map = {}
for i, v in ipairs(array) do
map[v] = i
end
return map
end
--[[
{ "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true }
--]]
function p.listToSet(t)
checkType("listToSet", 1, t, "table")
local set = {}
for _, item in ipairs(t) do
set[item] = true
end
return set
end
--[[
Recursive deep copy function.
Preserves identities of subtables.
]]
local function _deepCopy(orig, includeMetatable, already_seen)
-- Stores copies of tables indexed by the original table.
already_seen = already_seen or {}
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
if type(orig) == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)
end
already_seen[orig] = copy
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
local mt_copy = deepcopy(mt, includeMetatable, already_seen)
setmetatable(copy, mt_copy)
already_seen[mt] = mt_copy
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen)
end
--[[
Concatenates all values in the table that are indexed by a number, in order.
sparseConcat{ a, nil, c, d } => "acd"
sparseConcat{ nil, b, c, d } => "bcd"
]]
function p.sparseConcat(t, sep, i, j)
local list = {}
local list_i = 0
for _, v in p.sparseIpairs(t) do
list_i = list_i + 1
list[list_i] = v
end
return table.concat(list, sep, i, j)
end
--[[
-- This returns the length of a table, or the first integer key n counting from
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return
-- a different value when there are gaps in the array portion of the table.
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of
-- the number of unnamed template parameters, so use this function for
-- frame.args.
--]]
function p.length(t)
local i = 1
while t[i] ~= nil do
i = i + 1
end
return i - 1
end
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
-- if valueToFind is nil, error?
for _, v in ipairs(arr) do
if v == valueToFind then
return true
end
end
return false
end
return p
fe918509f168332267834b3a6f5c219a9de5b2e7
Module:Uses TemplateStyles/config
828
32
64
63
2023-06-05T21:41:59Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Uses_TemplateStyles/config]]
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Sandbox title: if the stylesheet’s title is <template>/<stylesheet>.css, the
-- stylesheet’s sandbox is expected to be at <template>/<sandbox_title>/<stylesheet>.css
-- Set to nil to disable sandbox links.
cfg['sandbox_title'] = 'sandbox'
-- Error category: this category is added if the module call contains errors
-- (e.g. no stylesheet listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = nil
-- Default category: this category is added if no custom category is specified
-- in module/template call. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Templates using TemplateStyles'
.. mw.getCurrentFrame():callParserFunction("#translation:")
-- Protection conflict category: this category is added if the protection level
-- of any stylesheet differs from the one of the template. A category name
-- without namespace, or nil to disable categorization (not recommended).
cfg['protection_conflict_category'] = nil
-- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil
-- to disable padlock check.
cfg['padlock_pattern'] = nil
-- Missing padlock category: this category is added if a protected stylesheet
-- doesn’t contain any padlock template (specified by the above Lua pattern).
-- A category name without namespace (no nil allowed) if the pattern is not nil,
-- unused (and thus may be nil) otherwise.
cfg['missing_padlock_category'] = nil
return cfg -- Don’t touch this line.
2e6b3c52ca2ac4b6a454a6d572121c4bf6e16ea1
Module:Message box/ombox.css
828
33
66
65
2023-06-05T21:42:00Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Message_box/ombox.css]]
sanitized-css
text/css
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
e2c21da9b2e5ea3a68e2f5a7432cbfd3cfce80a8
Module:Documentation/styles.css
828
34
68
67
2023-06-05T21:42:01Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Documentation/styles.css]]
sanitized-css
text/css
.ts-doc-sandbox .mbox-image {
padding:.75em 0 .75em .75em;
}
.ts-doc-doc {
clear: both;
background-color: #eaf3ff;
border: 1px solid #a3caff;
margin-top: 1em;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.ts-doc-header {
background-color: #c2dcff;
padding: .642857em 1em .5em;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.ts-doc-header .ts-tlinks-tlinks {
line-height: 24px;
margin-left: 0;
}
.ts-doc-header .ts-tlinks-tlinks a.external {
color: #0645ad;
}
.ts-doc-header .ts-tlinks-tlinks a.external:visited {
color: #0b0080;
}
.ts-doc-header .ts-tlinks-tlinks a.external:active {
color: #faa700;
}
.ts-doc-content {
padding: .214286em 1em;
}
.ts-doc-content:after {
content: '';
clear: both;
display: block;
}
.ts-doc-heading {
display: inline-block;
padding-left: 30px;
background: center left/24px 24px no-repeat;
/* @noflip */
background-image: url(//upload.wikimedia.org/wikipedia/commons/f/fb/OOjs_UI_icon_puzzle-ltr.svg);
height: 24px;
line-height: 24px;
font-size: 13px;
font-weight: 600;
letter-spacing: 1px;
text-transform: uppercase;
}
.ts-doc-content > *:first-child,
.ts-doc-footer > *:first-child {
margin-top: .5em;
}
.ts-doc-content > *:last-child,
.ts-doc-footer > *:last-child {
margin-bottom: .5em;
}
.ts-doc-footer {
background-color: #eaf3ff;
border: 1px solid #a3caff;
padding: .214286em 1em;
margin-top: .214286em;
font-style: italic;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
@media all and (min-width: 720px) {
.ts-doc-header .ts-tlinks-tlinks {
float: right;
}
}
71b09af67524324bf70d203a0a724bc74ec6c82e
Template:Tlx
10
35
70
69
2023-06-05T21:42:02Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Tlx]]
wikitext
text/x-wiki
<onlyinclude><!--
--><templatestyles src="Template:Mono/styles.css"/><!--
-->{{#if:{{yesno|{{{nowrap|}}}}}<!--
-->|<templatestyles src="Template:Nowrap/styles.css"/><!--
-->}}<span class="
monospaced
{{#if:{{yesno|{{{nowrap|}}}}}|nowrap}}
"><!--
-->{{((}}<!--
--><noinclude>[[Template:Tlx|tlx]]</noinclude><!--
--><includeonly>[[{{#if:{{{SISTER|}}}|{{{SISTER}}}Template|{{ns:10}}}}:{{{1}}}|{{{1}}}]]</includeonly><!--
-->{{#if:{{{2|}}}|{{!}}{{{2}}}}}<!--
-->{{#if:{{{3|}}}|{{!}}{{{3}}}}}<!--
-->{{#if:{{{4|}}}|{{!}}{{{4}}}}}<!--
-->{{#if:{{{5|}}}|{{!}}{{{5}}}}}<!--
-->{{#if:{{{6|}}}|{{!}}{{{6}}}}}<!--
-->{{#if:{{{7|}}}|{{!}}{{{7}}}}}<!--
-->{{#if:{{{8|}}}|{{!}}''...''}}<!--
-->{{))}}<!--
--></span><!--
--></onlyinclude>
{{documentation}}
25c4c72191d3dad2c3476ae6092c6c17ee3034d8
Template:Mono/styles.css
10
36
72
71
2023-06-05T21:42:02Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Mono/styles.css]]
sanitized-css
text/css
/* Styling for [[Template:Mono]] */
.monospaced {
/* Keep it like this: "monospace, monospace". Those are the rules from [[w:WP:MONO]]. */
font-family: monospace, monospace;
}
170e200cb4116c2055eb21c4e733217152b5a5fa
Template:((
10
37
74
73
2023-06-05T21:42:02Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:((]]
wikitext
text/x-wiki
{{<noinclude>
{{documentation}}[[Category:Workaround templates]]
</noinclude>
f8c63100e113b89d20396b75811d33e13b808f1a
Template:))
10
38
76
75
2023-06-05T21:42:03Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:))]]
wikitext
text/x-wiki
}}<noinclude>
{{documentation}}[[Category:Workaround templates]]
</noinclude>
e2331ab1b2f6b7061b29f929a502a016b6d54a54
Template:Plainlist/styles.css
10
39
78
77
2023-06-05T21:42:04Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Plainlist/styles.css]]
sanitized-css
text/css
/**
* Unbulleted lists
*/
.plainlist ul {
line-height: inherit;
list-style: none none;
margin: 0;
}
.plainlist ul li {
margin-bottom: 0;
}
7243fd4329145928d2b4b02fc42513ab65934318
Template:Tag
10
40
80
79
2023-06-05T21:42:04Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Tag]]
wikitext
text/x-wiki
{{#if:{{{plain|}}}|
|<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}">
}}{{#switch:{{{2|pair}}}
|c|close = <!--nothing-->
|s|single
|o|open
|p|pair = {{#tag:span|‎<|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}| {{{params}}}}}
}}{{#switch:{{{2|pair}}}
|c|close = {{{content|}}}
|s|single =  {{#tag:span|/>|class="p"}}
|o|open = {{#tag:span|>|class="p"}}{{{content|}}}
|p|pair = {{#tag:span|>|class="p"}}{{{content|...}}}
}}{{#switch:{{{2|pair}}}
|s|single
|o|open = <!--nothing-->
|c|close
|p|pair = {{#tag:span|‎</|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|>|class="p"}}
}}{{#if:{{{plain|}}}|
|</code>
}}<noinclude>
{{Documentation}}
</noinclude>
88657ad7afd7844d9681f7f08ba60c75c25800a1
Template:Plainlist/doc
10
41
82
81
2023-06-05T21:42:05Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Plainlist/doc]]
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
{{Uses TemplateStyles|Template:Plainlist/styles.css}}
This template provides a [[:en:Web Content Accessibility Guidelines|WCAG]]/ISO-standards-compliant accessible alternative to {{tag|br|s}} separated lists, which should not be used.
== Usage ==
{{tlx|plainlist}} starts a plain (i.e. unbulleted) list. It uses proper HTML list markup, which is more standards-compliant and more accessible than separating list items with {{tag|br|s}}. Detailed reasons for using this template can be found at [[:en:WP:UBLIST]].
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"description": {
"en": "Used to create plain (i.e. unbulleted) lists.",
"cs": "Slouží k vytváření jednoduchých (tj. bez odrážek) seznamů."
},
"format": "inline",
"params": {
"1": {
"label": {
"en": "Content",
"cs": "Obsah"
},
"description": {
"en": "The list to wrap.",
"cs": "Seznam k zabalení."
},
"suggested": true,
"type": "content"
},
"class": {
"label": {
"en": "Extra Classes",
"cs": "Extra třídy"
},
"description": {
"en": "Extra class names to add to the `class` attribute.",
"cs": "Další názvy tříd, které se mají přidat do atributu `class`."
},
"type": "string"
}
},
"paramOrder": [
"class",
"1"
]
}
</templatedata>
== See also ==
* {{tlx|Unbulleted list}} – Uses [[Module:List]]
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Formatting templates]]
}}</includeonly>
c5c829e1be67018c2403beee28b7f945f132c172
Reiji Tokisaka
0
42
83
2023-06-05T21:42:52Z
Otonashi Ayana
2
Created page with "{{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }}"
wikitext
text/x-wiki
{{infobox character
| name = {{PAGENAME}}
| jname =
| image =
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
69acbcf6e61c97f950aa6d1c5e49509a66947c38
87
83
2023-06-05T22:08:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name = {{PAGENAME}}
| jname =
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
ef453976d85e31338bc2f25e055f2c3de2bf9e2b
Template:Kns
10
43
84
2023-06-05T22:05:49Z
Otonashi Ayana
2
Created page with "[[Kara no Shoujo]]"
wikitext
text/x-wiki
[[Kara no Shoujo]]
a1423ba9e447f6504c366a5f8c5060b068002313
89
84
2023-06-05T23:56:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
''[[Kara no Shoujo]]''
c7a004988707f4da4452d6debeb8ebb5161f8758
File:Srei0102a.png
6
44
85
2023-06-05T22:07:18Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Infobox character
10
2
86
14
2023-06-05T22:08:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{{name}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
<pre>
{{infobox character
| name = {{PAGENAME}}
| jname =
| image =
| aka =
| gender =
| age =
| appearance =
| seiyu =
| relations =
}}</pre>
6e063724b0741a09a19e5c2abcaf0c2551175506
MediaWiki:Tagline
8
45
88
2023-06-05T22:10:36Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
MediaWiki:Gadgets-definition
8
46
90
2023-06-06T05:07:17Z
Otonashi Ayana
2
Created page with "* spoilers [Kns1]"
wikitext
text/x-wiki
* spoilers [Kns1]
843646bd585528c2447429a999dd2518e2ddce3e
92
90
2023-06-06T05:13:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
* spoilers [Kns1] | spoilers.css
67c9f7f8e6215520fd8c42de0fceb2481dcb6397
93
92
2023-06-06T05:15:02Z
Otonashi Ayana
2
wikitext
text/x-wiki
* spoilers [ rights=foo,bar ] | spoilers.css
9fa50b545aa92450aa4e0e8348372e8c10062da4
94
93
2023-06-06T05:15:35Z
Otonashi Ayana
2
wikitext
text/x-wiki
* spoilers [ mkey=foo,bar ] | spoilers.css
da2a6514759676917fa4bd3d2bfb92df18bd9501
95
94
2023-06-06T05:20:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
* spoilers [ ResourceLoader | mykey=foo,bar ] | spoilers.css
9faf77894f52c40a399bb3fed1ee8d7dc9f1427c
96
95
2023-06-06T05:23:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
* spoilers [ KnS1 | mykey=foo,bar ] | spoilers.css
f83dab646c210f284aa68e5aaa87ebdef4b93a05
100
96
2023-06-06T05:27:59Z
Otonashi Ayana
2
wikitext
text/x-wiki
== header-spoilers ==
* spoilers [ KnS1 | mykey=foo,bar ] | spoilers.css
58c7fa3d558428d95eda858415e38e9340159324
MediaWiki:Gadget-spoilers/kns1.css
8
47
91
2023-06-06T05:12:41Z
Otonashi Ayana
2
Created page with ".spoiler-kns1{ color:red; }"
css
text/css
.spoiler-kns1{
color:red;
}
fa6773597c05b7a4802bf1b1ed5598097fb8a789
97
91
2023-06-06T05:23:35Z
Otonashi Ayana
2
Otonashi Ayana moved page [[MediaWiki:Spoilers.css]] to [[MediaWiki:Gadget-spoilers.css]]
css
text/css
.spoiler-kns1{
color:red;
}
fa6773597c05b7a4802bf1b1ed5598097fb8a789
MediaWiki:Spoilers.css
8
48
98
2023-06-06T05:23:35Z
Otonashi Ayana
2
Otonashi Ayana moved page [[MediaWiki:Spoilers.css]] to [[MediaWiki:Gadget-spoilers.css]]
css
text/css
/* #REDIRECT */@import url(https://karanoshoujo.miraheze.org/w/index.php?title=MediaWiki:Gadget-spoilers.css&action=raw&ctype=text/css);
d6531c0eb3478cf195ce83650b9e59657c2562e5
MediaWiki:Gadget-spoilers
8
49
99
2023-06-06T05:24:13Z
Otonashi Ayana
2
Created page with "Determines visible spoilers."
wikitext
text/x-wiki
Determines visible spoilers.
4f3a568f50bcfe7b62560d13b88f70051a6f70c6
MediaWiki:Gadget-section-header-spoilers
8
50
101
2023-06-06T05:30:23Z
Otonashi Ayana
2
Created page with "Spoilers"
wikitext
text/x-wiki
Spoilers
63cc8c362870763052b162be9680b9b52bbf23e9
102
101
2023-06-06T05:36:21Z
Otonashi Ayana
2
Otonashi Ayana moved page [[MediaWiki:Gadget-section-interface-gadgets]] to [[MediaWiki:Gadget-section-header-spoilers]] without leaving a redirect
wikitext
text/x-wiki
Spoilers
63cc8c362870763052b162be9680b9b52bbf23e9
MediaWiki:Gadgets-definition
8
46
103
100
2023-06-06T05:38:18Z
Otonashi Ayana
2
wikitext
text/x-wiki
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* spoilers [ KnS1 | mykey=foo,bar ] | spoilers.css
e89d72d1037b9b8226a8c4cd9208a4e91ea0f9a8
104
103
2023-06-06T05:45:10Z
Otonashi Ayana
2
wikitext
text/x-wiki
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
374a69d0ba86f957cd79aa6f3b193f4d9c7f4516
121
104
2023-06-06T06:13:19Z
Otonashi Ayana
2
wikitext
text/x-wiki
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css | spoilers/cartagra.js
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
d32be96822c0ff259c620870280bf70bc87dcc62
122
121
2023-06-06T06:14:19Z
Otonashi Ayana
2
wikitext
text/x-wiki
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra [ ResourceLoader ] | spoilers/cartagra.css | spoilers/cartagra.js
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
d098ab4ccbba48f32381585b3b8bc1c668993b04
MediaWiki:Gadget-spoilers/kns1.css
8
47
105
97
2023-06-06T05:45:33Z
Otonashi Ayana
2
Otonashi Ayana moved page [[MediaWiki:Gadget-spoilers.css]] to [[MediaWiki:Gadget-spoilers/kns1.css]] without leaving a redirect
css
text/css
.spoiler-kns1{
color:red;
}
fa6773597c05b7a4802bf1b1ed5598097fb8a789
MediaWiki:Gadget-spoilers/kns2.css
8
51
106
2023-06-06T05:46:31Z
Otonashi Ayana
2
Created page with ".spoiler-kns2{ color:red; }"
css
text/css
.spoiler-kns2{
color:red;
}
7a89ab088cce897e2111b88a32c464870d640199
MediaWiki:Gadget-spoilers/kns3.css
8
52
107
2023-06-06T05:46:45Z
Otonashi Ayana
2
Created page with ".spoiler-kns3{ color:red; }"
css
text/css
.spoiler-kns3{
color:red;
}
d5ff84b002906535cd04d222d3f436a7b5bbb723
MediaWiki:Gadget-spoilers/cartagra.css
8
53
108
2023-06-06T05:47:01Z
Otonashi Ayana
2
Created page with ".spoiler-cartagra{ color:blue; }"
css
text/css
.spoiler-cartagra{
color:blue;
}
79324c5f9799e85380db16b264617c4fa6ed3a7a
127
108
2023-06-06T06:28:05Z
Otonashi Ayana
2
css
text/css
.spoiler-cartagra{
display:inline;
color:blue;
}
1d8535bdad13deada0bece527fd70fd48b92e515
128
127
2023-06-06T06:30:24Z
Otonashi Ayana
2
css
text/css
.spoiler-cartagra{
display:inline !important;
color:blue;
}
8b761bf7036748a6f2bb2732c5b22f7fac525373
MediaWiki:Gadget-cartagra
8
54
109
2023-06-06T05:48:20Z
Otonashi Ayana
2
Created page with "'''Cartagra''' — Reveal all spoilers for ''Cartagra''"
wikitext
text/x-wiki
'''Cartagra''' — Reveal all spoilers for ''Cartagra''
4fa93b39885dfb9b14c0a9de6bc54e880d46a376
110
109
2023-06-06T05:48:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
'''Cartagra''' — Reveal all spoilers for ''[[Cartagra]]''
05992ec26075cba2a9fc01528fb90d5258a9c313
MediaWiki:Gadget-kns1
8
55
111
2023-06-06T05:49:10Z
Otonashi Ayana
2
Created page with "'''Kara no Shōjo''' — Reveal all spoilers for {{kns}}"
wikitext
text/x-wiki
'''Kara no Shōjo''' — Reveal all spoilers for {{kns}}
81b4301e8a5d510eaaac8a99a7a6881631f9e7c9
Template:Kns
10
43
112
89
2023-06-06T05:49:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
''[[Kara no Shōjo]]''
bea1fe564ce79fbe82d7f55ba04960777ef3164e
MediaWiki:Gadget-kns2
8
56
113
2023-06-06T05:50:03Z
Otonashi Ayana
2
Created page with "'''Kara no Shōjo 2''' — Reveal all spoilers for {{kns2}}"
wikitext
text/x-wiki
'''Kara no Shōjo 2''' — Reveal all spoilers for {{kns2}}
576e0df248dd96e11a73972c7e4b7d8947b529d0
MediaWiki:Gadget-kns3
8
57
114
2023-06-06T05:50:07Z
Otonashi Ayana
2
Created page with "'''Kara no Shōjo 3''' — Reveal all spoilers for {{kns3}}"
wikitext
text/x-wiki
'''Kara no Shōjo 3''' — Reveal all spoilers for {{kns3}}
772b4229d94032fdc291e29e281a3684abd64a49
Template:Kns2
10
58
115
2023-06-06T05:50:37Z
Otonashi Ayana
2
Created page with "''[[Kara no Shōjo: The Second Episode]]''"
wikitext
text/x-wiki
''[[Kara no Shōjo: The Second Episode]]''
8b20d92c868e99f5a2d673f69b78c77d8190ecb1
Template:Kns3
10
59
116
2023-06-06T05:50:52Z
Otonashi Ayana
2
Created page with "''[[Kara no Shōjo: The Last Episode]]''"
wikitext
text/x-wiki
''[[Kara no Shōjo: The Last Episode]]''
2f47c347aeeb463efa04e711c351d774113e5257
Template:Cartagra
10
60
117
2023-06-06T05:53:22Z
Otonashi Ayana
2
Created page with "''[[Cartagra]]''"
wikitext
text/x-wiki
''[[Cartagra]]''
bc7dc68cc9308f3556cfb8370c7f15407ee261b8
File:Ssyu0101a.png
6
61
118
2023-06-06T05:54:18Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Shugo Takashiro
0
62
119
2023-06-06T05:58:07Z
Otonashi Ayana
2
Created page with "{{infobox character | name = {{PAGENAME}} | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * [[Kazuna Kozuki]] (love interest) * [[Kazuna Takashiro]] (wife) }} }}"
wikitext
text/x-wiki
{{infobox character
| name = {{PAGENAME}}
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations = {{plainlist|
* [[Kazuna Kozuki]] (love interest)
* [[Kazuna Takashiro]] (wife)
}}
}}
09a2266f7f78ad5cd717fa1392f05d6c81dcc0db
124
119
2023-06-06T06:19:54Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name = {{PAGENAME}}
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations = {{plainlist|
* {{spoiler|[[Kazuna Kozuki]] (love interest)}}
* [[Kazuna Takashiro]] (wife)
}}
}}
8b6113f095ca4d70002f3ae82f0ffee32e33d157
MediaWiki:Gadget-spoilers/cartagra.js
8
63
120
2023-06-06T06:12:33Z
Otonashi Ayana
2
Created page with "var spoilerCartagra = true;"
javascript
text/javascript
var spoilerCartagra = true;
a4579a1889e40f72ed3ba787edf164928ed9e9c3
Template:Spoiler
10
64
123
2023-06-06T06:18:12Z
Otonashi Ayana
2
Created page with "<span class="spoiler-cartagra">{{{1}}}</span>"
wikitext
text/x-wiki
<span class="spoiler-cartagra">{{{1}}}</span>
f8014c20438dc0ac129316a0db3ebb1ed93ac6da
126
123
2023-06-06T06:26:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
<span class="spoiler-cartagra">{{{1}}}</span>
4048d6b77fefbf4bf27271b6954268d838c45a5a
129
126
2023-06-06T06:38:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" /><span class="spoiler-cartagra">{{{1}}}</span>
07b7707055bdee6f1e8b089969cd1b6c647ca9d5
Template:Navbox
10
66
131
130
2023-06-06T08:51:15Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Navbox]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
fe9b964401f895918ee4fe078678f1722a3c41ec
Module:Yesno
828
12
133
24
2023-06-06T08:51:16Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Yesno]]: w
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
Module:Arguments
828
13
135
26
2023-06-06T08:51:16Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Arguments]]: w
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Template:Tl
10
67
137
136
2023-06-06T08:51:16Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tl]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Redirect category shell|
{{R from move}}
}}
d6593bb3b4a866249f55d0f34b047a71fe1f1529
Template:Template link
10
68
139
138
2023-06-06T08:51:17Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_link]]: w
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
eabbec62efe3044a98ebb3ce9e7d4d43c222351d
Module:Message box
828
11
141
22
2023-06-06T08:51:17Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Message_box]]: w
Scribunto
text/plain
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
fcf2586b774e6db72e0a2837019f5b445124ddc4
Module:Message box/configuration
828
14
143
28
2023-06-06T08:51:17Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Message_box/configuration]]: w
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ambox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'plainlinks', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = nil,
templateErrorParamsToCheck = {'issue', 'fix', 'subst'}
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'cmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'cmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
caution = {
class = 'cmbox-style',
image = 'Ambox warning yellow.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'cmbox'},
imageEmptyCell = true
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'OOjs UI icon clock-destructive.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'OOjs UI icon information-progressive.svg'
},
system = {
class = 'fmbox-system',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'plainlinks', 'fmbox'},
imageEmptyCell = false,
imageRightNone = false
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'imbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'imbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox license.png' -- @todo We need an SVG version of this
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg'
},
notice = {
class = 'imbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
usePlainlinksParam = true,
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ombox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
critical = {
class = 'mbox-critical',
image = 'OOjs UI icon clock-destructive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'tmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'tmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
imageEmptyCellStyle = true,
templateCategory = 'Talk message boxes'
}
}
d8cf419a57983f67944903d17535c0ee0780ceb6
Module:Redirect
828
69
145
144
2023-06-06T08:51:18Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Redirect]]: w
Scribunto
text/plain
-- This module provides functions for getting the target of a redirect page.
local p = {}
-- Gets a mw.title object, using pcall to avoid generating script errors if we
-- are over the expensive function count limit (among other possible causes).
local function getTitle(...)
local success, titleObj = pcall(mw.title.new, ...)
if success then
return titleObj
else
return nil
end
end
-- Gets the name of a page that a redirect leads to, or nil if it isn't a
-- redirect.
function p.getTargetFromText(text)
local target = string.match(
text,
"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]"
) or string.match(
text,
"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
)
return target and mw.uri.decode(target, 'PATH')
end
-- Gets the target of a redirect. If the page specified is not a redirect,
-- returns nil.
function p.getTarget(page, fulltext)
-- Get the title object. Both page names and title objects are allowed
-- as input.
local titleObj
if type(page) == 'string' or type(page) == 'number' then
titleObj = getTitle(page)
elseif type(page) == 'table' and type(page.getContent) == 'function' then
titleObj = page
else
error(string.format(
"bad argument #1 to 'getTarget'"
.. " (string, number, or title object expected, got %s)",
type(page)
), 2)
end
if not titleObj then
return nil
end
local targetTitle = titleObj.redirectTarget
if targetTitle then
if fulltext then
return targetTitle.fullText
else
return targetTitle.prefixedText
end
else
return nil
end
end
--[[
-- Given a single page name determines what page it redirects to and returns the
-- target page name, or the passed page name when not a redirect. The passed
-- page name can be given as plain text or as a page link.
--
-- Returns page name as plain text, or when the bracket parameter is given, as a
-- page link. Returns an error message when page does not exist or the redirect
-- target cannot be determined for some reason.
--]]
function p.luaMain(rname, bracket, fulltext)
if type(rname) ~= "string" or not rname:find("%S") then
return nil
end
bracket = bracket and "[[%s]]" or "%s"
rname = rname:match("%[%[(.+)%]%]") or rname
local target = p.getTarget(rname, fulltext)
local ret = target or rname
ret = getTitle(ret)
if ret then
if fulltext then
ret = ret.fullText
else
ret = ret.prefixedText
end
return bracket:format(ret)
else
return nil
end
end
-- Provides access to the luaMain function from wikitext.
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
return p.luaMain(args[1], args.bracket, args.fulltext) or ''
end
-- Returns true if the specified page is a redirect, and false otherwise.
function p.luaIsRedirect(page)
local titleObj = getTitle(page)
if not titleObj then
return false
end
if titleObj.isRedirect then
return true
else
return false
end
end
-- Provides access to the luaIsRedirect function from wikitext, returning 'yes'
-- if the specified page is a redirect, and the blank string otherwise.
function p.isRedirect(frame)
local args = require('Module:Arguments').getArgs(frame, {frameOnly = true})
if p.luaIsRedirect(args[1]) then
return 'yes'
else
return ''
end
end
return p
a224c45940343d66f49a78b0a39b2045e2c45d20
Template:DMCA
10
70
147
146
2023-06-06T08:51:18Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:DMCA]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Dated maintenance category (articles)]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
711d3f1c53fa704297f675a8dcf1a56719c5b654
Template:Dated maintenance category
10
71
149
148
2023-06-06T08:51:19Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Dated_maintenance_category]]: w
wikitext
text/x-wiki
<nowiki/><!--This nowiki helps to prevent whitespace at the top of articles-->{{#ifeq:{{FULLROOTPAGENAME}}|Wikipedia:Template messages|<!--Do not categorize-->|<!--
-->{{#ifexpr:{{#if:{{NAMESPACE}}|0|1}}+{{#ifeq:{{{onlyarticles|no}}}|yes|0|1}}
|{{#if:{{{3|}}}
|[[Category:{{{1}}} {{{2}}} {{{3}}}]]<!--
-->{{#ifexist:Category:{{{1}}} {{{2}}} {{{3}}}
|<!--
-->|[[Category:Articles with invalid date parameter in template]]<!--
-->}}
|[[Category:{{#if:{{{5|}}}
|{{{5}}}<!--
-->|{{{1}}}<!--
-->}}]]<!--
-->}}{{#if:{{{4|}}}
|[[Category:{{{4}}}]]}}<!--
-->}}<!--
-->}}<noinclude>
{{documentation}}
</noinclude>
41e7d4000124d4f718ddf222af0b72825048c4c4
Template:FULLROOTPAGENAME
10
72
151
150
2023-06-06T08:51:19Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:FULLROOTPAGENAME]]: w
wikitext
text/x-wiki
{{ safesubst:<noinclude/>#if: {{ safesubst:<noinclude/>Ns has subpages | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{ safesubst:<noinclude/>NAMESPACE:{{{1}}}}}|{{ safesubst:<noinclude/>NAMESPACE}}}} }}
| {{ safesubst:<noinclude/>#titleparts:{{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}|1}}
| {{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}
}}<noinclude>
{{documentation}}
</noinclude>
fd0c4e7050dded2d50e5df405e6e5e31dd0d46ac
Template:Ns has subpages
10
73
153
152
2023-06-06T08:51:19Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Ns_has_subpages]]: w
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
060d2d01af26cb67fd90a7c346a0d2d5e450a040
Module:Ns has subpages
828
74
155
154
2023-06-06T08:51:20Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Ns_has_subpages]]: w
Scribunto
text/plain
-- This module implements [[Template:Ns has subpages]].
-- While the template is fairly simple, this information is made available to
-- Lua directly, so using a module means that we don't have to update the
-- template as new namespaces are added.
local p = {}
function p._main(ns, frame)
-- Get the current namespace if we were not passed one.
if not ns then
ns = mw.title.getCurrentTitle().namespace
end
-- Look up the namespace table from mw.site.namespaces. This should work
-- for a majority of cases.
local nsTable = mw.site.namespaces[ns]
-- Try using string matching to get the namespace from page names.
-- Do a quick and dirty bad title check to try and make sure we do the same
-- thing as {{NAMESPACE}} in most cases.
if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
local nsStripped = ns:gsub('^[_%s]*:', '')
nsStripped = nsStripped:gsub(':.*$', '')
nsTable = mw.site.namespaces[nsStripped]
end
-- If we still have no match then try the {{NAMESPACE}} parser function,
-- which should catch the remainder of cases. Don't use a mw.title object,
-- as this would increment the expensive function count for each new page
-- tested.
if not nsTable then
frame = frame or mw.getCurrentFrame()
local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
end
return nsTable and nsTable.hasSubpages
end
function p.main(frame)
local ns = frame:getParent().args[1]
if ns then
ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
ns = tonumber(ns) or ns
end
local hasSubpages = p._main(ns, frame)
return hasSubpages and 'yes' or ''
end
return p
e133068ba73738b16e1e3eba47735516a461eb5b
Template:Yesno
10
23
157
46
2023-06-06T08:51:20Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Yesno]]: w
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|false
|0 = {{{no|<!-- null -->}}}
| = {{{blank|{{{no|<!-- null -->}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|true
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
166fab9e5411aacd02ca4c9e93fbc7bf6bcf26ac
Template:Main other
10
75
159
158
2023-06-06T08:51:20Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Main_other]]: w
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:0}}
| main
| other
}}
}}
| main = {{{1|}}}
| other
| #default = {{{2|}}}
}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
86ad907ffeea3cc545159e00cd1f2d6433946450
Module:Check for unknown parameters
828
76
161
160
2023-06-06T08:51:21Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Check_for_unknown_parameters]]: w
Scribunto
text/plain
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add results to the output tables
local res = {}
if #values > 0 then
local unknown_text = args['unknown'] or 'Found _VALUE_, '
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
local preview_text = args['preview']
if isnotempty(preview_text) then
preview_text = require('Module:If preview')._warning({preview_text})
elseif preview == nil then
preview_text = unknown_text
end
unknown_text = preview_text
end
for _, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p
93db6d115d4328d2a5148bb42959105e367b663e
Module:String
828
77
163
162
2023-06-06T08:51:21Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:String]]: w
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The fist index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
return str
6df794dd52434e0f6a372c9918f5a9dedd15f579
Module:List
828
30
165
60
2023-06-06T08:51:21Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:List]]: w
Scribunto
text/plain
-- This module outputs different kinds of lists. At the moment, bulleted,
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Flatlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for i, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create((
#data.classes > 0
or data.marginLeft
or data.style
) and 'div' or nil)
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for i, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
return p.renderList(data)
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame)
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
d701c0798e541793aa5ed1e9af50fc3b20548907
Module:TableTools
828
31
167
62
2023-06-06T08:51:22Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:TableTools]]: w
Scribunto
text/plain
--[[
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should --
-- not be called directly from #invoke. --
------------------------------------------------------------------------------------
--]]
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
--[[
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
--]]
function p.isPositiveInteger(v)
if type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity then
return true
else
return false
end
end
--[[
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a value can be a valid table key. Lua will
-- generate an error if a NaN is used as a table key.
------------------------------------------------------------------------------------
--]]
function p.isNan(v)
if type(v) == 'number' and tostring(v) == '-nan' then
return true
else
return false
end
end
--[[
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
--]]
function p.shallowClone(t)
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
--]]
function p.removeDuplicates(t)
checkType('removeDuplicates', 1, t, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for i, v in ipairs(t) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
--]]
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k, v in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will
-- return {1, 3, 6}.
------------------------------------------------------------------------------------
--]]
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
return s
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k, v in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
--[[
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like ("foo1", "bar1", "foo2", "baz2"), returns a table
-- of subtables in the format
-- { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }
-- Keys that don't end with an integer are stored in a subtable named "other".
-- The compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
--]]
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
--[[
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
--]]
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
--[[
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
--]]
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for k in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
else -- This will fail with table, boolean, function.
return item1 < item2
end
end
--[[
Returns a list of the keys in a table, sorted using either a default
comparison function or a custom keySort function.
]]
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, { 'function', 'boolean', 'nil' })
end
local list = {}
local index = 1
for key, value in pairs(t) do
list[index] = key
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(list, keySort)
end
return list
end
--[[
Iterates through a table, with the keys sorted using the keysToList function.
If there are only numerical keys, sparseIpairs is probably more efficient.
]]
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local list = p.keysToList(t, keySort, true)
local i = 0
return function()
i = i + 1
local key = list[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
--[[
Returns true if all keys in the table are consecutive integers starting at 1.
--]]
function p.isArray(t)
checkType("isArray", 1, t, "table")
local i = 0
for k, v in pairs(t) do
i = i + 1
if t[i] == nil then
return false
end
end
return true
end
-- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 }
function p.invert(array)
checkType("invert", 1, array, "table")
local map = {}
for i, v in ipairs(array) do
map[v] = i
end
return map
end
--[[
{ "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true }
--]]
function p.listToSet(t)
checkType("listToSet", 1, t, "table")
local set = {}
for _, item in ipairs(t) do
set[item] = true
end
return set
end
--[[
Recursive deep copy function.
Preserves identities of subtables.
]]
local function _deepCopy(orig, includeMetatable, already_seen)
-- Stores copies of tables indexed by the original table.
already_seen = already_seen or {}
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
if type(orig) == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)
end
already_seen[orig] = copy
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
local mt_copy = deepcopy(mt, includeMetatable, already_seen)
setmetatable(copy, mt_copy)
already_seen[mt] = mt_copy
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen)
end
--[[
Concatenates all values in the table that are indexed by a number, in order.
sparseConcat{ a, nil, c, d } => "acd"
sparseConcat{ nil, b, c, d } => "bcd"
]]
function p.sparseConcat(t, sep, i, j)
local list = {}
local list_i = 0
for _, v in p.sparseIpairs(t) do
list_i = list_i + 1
list[list_i] = v
end
return table.concat(list, sep, i, j)
end
--[[
-- This returns the length of a table, or the first integer key n counting from
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return
-- a different value when there are gaps in the array portion of the table.
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of
-- the number of unnamed template parameters, so use this function for
-- frame.args.
--]]
function p.length(t)
local i = 1
while t[i] ~= nil do
i = i + 1
end
return i - 1
end
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
-- if valueToFind is nil, error?
for _, v in ipairs(arr) do
if v == valueToFind then
return true
end
end
return false
end
return p
fe918509f168332267834b3a6f5c219a9de5b2e7
Template:Spaces
10
78
169
168
2023-06-06T08:51:22Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Spaces]]: w
wikitext
text/x-wiki
<span class="nowrap">{{#iferror:{{#expr:{{{1|1}}}}}
|{{#switch:{{{1}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}
|{{#invoke:String|rep|{{#switch:{{{2}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}|{{{1|1}}}}}
}}</span><noinclude>
{{documentation}}
</noinclude>
a9ed762825e7579f15dcb9b171b0c1c3bf524b3f
Module:Template link general
828
79
171
170
2023-06-06T08:51:22Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Template_link_general]]: w
Scribunto
text/plain
-- This implements Template:Tlg
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Is a string non-empty?
local function _ne(s)
return s ~= nil and s ~= ""
end
local nw = mw.text.nowiki
local function addTemplate(s)
local i, _ = s:find(':', 1, true)
if i == nil then
return 'Template:' .. s
end
local ns = s:sub(1, i - 1)
if ns == '' or mw.site.namespaces[ns] then
return s
else
return 'Template:' .. s
end
end
local function trimTemplate(s)
local needle = 'template:'
if s:sub(1, needle:len()):lower() == needle then
return s:sub(needle:len() + 1)
else
return s
end
end
local function linkTitle(args)
if _ne(args.nolink) then
return args['1']
end
local titleObj
local titlePart = '[['
if args['1'] then
-- This handles :Page and other NS
titleObj = mw.title.new(args['1'], 'Template')
else
titleObj = mw.title.getCurrentTitle()
end
titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or
addTemplate(args['1']))
local textPart = args.alttext
if not _ne(textPart) then
if titleObj ~= nil then
textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText
else
-- redlink
textPart = args['1']
end
end
if _ne(args.subst) then
-- HACK: the ns thing above is probably broken
textPart = 'subst:' .. textPart
end
if _ne(args.brace) then
textPart = nw('{{') .. textPart .. nw('}}')
elseif _ne(args.braceinside) then
textPart = nw('{') .. textPart .. nw('}')
end
titlePart = titlePart .. '|' .. textPart .. ']]'
if _ne(args.braceinside) then
titlePart = nw('{') .. titlePart .. nw('}')
end
return titlePart
end
function p.main(frame)
local args = getArgs(frame, {
trim = true,
removeBlanks = false
})
return p._main(args)
end
function p._main(args)
local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)
local italic = _ne(args.italic) or _ne(args.italics)
local dontBrace = _ne(args.brace) or _ne(args.braceinside)
local code = _ne(args.code) or _ne(args.tt)
local show_result = _ne(args._show_result)
local expand = _ne(args._expand)
-- Build the link part
local titlePart = linkTitle(args)
if bold then titlePart = "'''" .. titlePart .. "'''" end
if _ne(args.nowrapname) then titlePart = '<span class="nowrap">' .. titlePart .. '</span>' end
-- Build the arguments
local textPart = ""
local textPartBuffer = "|"
local codeArguments = {}
local codeArgumentsString = ""
local i = 2
local j = 1
while args[i] do
local val = args[i]
if val ~= "" then
if _ne(args.nowiki) then
-- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will
-- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up
val = nw(mw.text.unstripNoWiki(val))
end
local k, v = string.match(val, "(.*)=(.*)")
if not k then
codeArguments[j] = val
j = j + 1
else
codeArguments[k] = v
end
codeArgumentsString = codeArgumentsString .. textPartBuffer .. val
if italic then
val = '<span style="font-style:italic;">' .. val .. '</span>'
end
textPart = textPart .. textPartBuffer .. val
end
i = i + 1
end
-- final wrap
local ret = titlePart .. textPart
if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end
if _ne(args.a) then ret = nw('*') .. ' ' .. ret end
if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end
if code then
ret = '<code>' .. ret .. '</code>'
elseif _ne(args.plaincode) then
ret = '<code style="border:none;background:transparent;">' .. ret .. '</code>'
end
if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end
--[[ Wrap as html??
local span = mw.html.create('span')
span:wikitext(ret)
--]]
if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end
if show_result then
local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments}
ret = ret .. " → " .. result
end
if expand then
local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}')
local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query)
mw.log()
ret = ret .. " [" .. tostring(url) .. "]"
end
return ret
end
return p
c7307fa3959d308a2dd7fd2f5009c1ce6db3d122
Template:Template other
10
4
173
7
2023-06-06T08:51:23Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_other]]: w
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
| template
| other
}}
}}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
06fb13d264df967b5232141067eb7d2b67372d76
Template:Clear
10
80
175
174
2023-06-06T08:51:23Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Clear]]: w
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};"></div><noinclude>
{{documentation}}
</noinclude>
38bab3e3d7fbd3d6800d46556e60bc6bac494d72
Template:Main
10
81
177
176
2023-06-06T08:51:24Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Main]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Labelled list hatnote|labelledList|Main article|Main articles|Main page|Main pages}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
99ebf54e265aa9354bc4861d3b0da913f1441ede
Template:Sidebar
10
82
179
178
2023-06-06T08:51:24Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Sidebar]]: w
wikitext
text/x-wiki
{{#invoke:Sidebar|sidebar}}<noinclude>
{{documentation}}</noinclude>
ab2498000a99daf324f656b0badd187b4a3e2b42
Template:Plainlist
10
8
181
16
2023-06-06T08:51:25Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Plainlist]]: w
wikitext
text/x-wiki
<templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}">{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
8ca89b36606f7babc854ca4f296b3cea3e358a07
Module:Effective protection expiry
828
83
183
182
2023-06-06T08:51:25Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Effective_protection_expiry]]: w
Scribunto
text/plain
local p = {}
-- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)
return stabilitySettings and stabilitySettings.expiry or 'unknown'
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
end
local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
if rawExpiry == 'infinity' then
return 'infinity'
elseif rawExpiry == '' then
return 'unknown'
else
local year, month, day, hour, minute, second = rawExpiry:match(
'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'
)
if year then
return string.format(
'%s-%s-%sT%s:%s:%s',
year, month, day, hour, minute, second
)
else
error('internal error in Module:Effective protection expiry; malformed expiry timestamp')
end
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
9a8c58dc2667232ed08a9b206a5d89ca8150312b
Module:Effective protection level
828
84
185
184
2023-06-06T08:51:25Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Effective_protection_level]]: w
Scribunto
text/plain
local p = {}
-- Returns the permission required to perform a given action on a given title.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local level = mw.ext.FlaggedRevs.getStabilitySettings(title)
level = level and level.autoreview
if level == 'review' then
return 'reviewer'
elseif level ~= '' then
return level
else
return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review
end
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then
error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 )
end
if title.namespace == 8 then -- MediaWiki namespace
if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
return 'interfaceadmin'
else -- any non-JS/CSS MediaWiki page
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- user JSON page
return 'sysop'
end
end
if action == 'undelete' then
return 'sysop'
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page
return 'sysop'
elseif level == 'templateeditor' then
return 'templateeditor'
elseif action == 'move' then
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif title.namespace == 6 then
return 'filemover'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
end
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'autoconfirmed'
elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts
return 'user'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
70256a489edf6be9808031b14a7e3ef3e025da97
Module:File link
828
85
187
186
2023-06-06T08:51:26Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:File_link]]: w
Scribunto
text/plain
-- This module provides a library for formatting file wikilinks.
local yesno = require('Module:Yesno')
local checkType = require('libraryUtil').checkType
local p = {}
function p._main(args)
checkType('_main', 1, args, 'table')
-- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our
-- own function to get the right error level.
local function checkArg(key, val, level)
if type(val) ~= 'string' then
error(string.format(
"type error in '%s' parameter of '_main' (expected string, got %s)",
key, type(val)
), level)
end
end
local ret = {}
-- Adds a positional parameter to the buffer.
local function addPositional(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = val
end
-- Adds a named parameter to the buffer. We assume that the parameter name
-- is the same as the argument key.
local function addNamed(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = key .. '=' .. val
end
-- Filename
checkArg('file', args.file, 3)
ret[#ret + 1] = 'File:' .. args.file
-- Format
if args.format then
checkArg('format', args.format)
if args.formatfile then
checkArg('formatfile', args.formatfile)
ret[#ret + 1] = args.format .. '=' .. args.formatfile
else
ret[#ret + 1] = args.format
end
end
-- Border
if yesno(args.border) then
ret[#ret + 1] = 'border'
end
addPositional('location')
addPositional('alignment')
addPositional('size')
addNamed('upright')
addNamed('link')
addNamed('alt')
addNamed('page')
addNamed('class')
addNamed('lang')
addNamed('start')
addNamed('end')
addNamed('thumbtime')
addPositional('caption')
return string.format('[[%s]]', table.concat(ret, '|'))
end
function p.main(frame)
local origArgs = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:File link'
})
if not origArgs.file then
error("'file' parameter missing from [[Template:File link]]", 0)
end
-- Copy the arguments that were passed to a new table to avoid looking up
-- every possible parameter in the frame object.
local args = {}
for k, v in pairs(origArgs) do
-- Make _BLANK a special argument to add a blank parameter. For use in
-- conditional templates etc. it is useful for blank arguments to be
-- ignored, but we still need a way to specify them so that we can do
-- things like [[File:Example.png|link=]].
if v == '_BLANK' then
v = ''
end
args[k] = v
end
return p._main(args)
end
return p
66925f088d11530f2482f04181a3baaaa0ad3d0c
Module:Format link
828
86
189
188
2023-06-06T08:51:26Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Format_link]]: w
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Format link
--
-- Makes a wikilink from the given link and display values. Links are escaped
-- with colons if necessary, and links to sections are detected and displayed
-- with " § " as a separator rather than the standard MediaWiki "#". Used in
-- the {{format link}} template.
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local mError -- lazily initialise [[Module:Error]]
local yesno -- lazily initialise [[Module:Yesno]]
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
local function maybeItalicize(s, shouldItalicize)
-- Italicize s if s is a string and the shouldItalicize parameter is true.
if s and shouldItalicize then
return '<i>' .. s .. '</i>'
else
return s
end
end
local function parseLink(link)
-- Parse a link and return a table with the link's components.
-- These components are:
-- - link: the link, stripped of any initial colon (always present)
-- - page: the page name (always present)
-- - section: the page name (may be nil)
-- - display: the display text, if manually entered after a pipe (may be nil)
link = removeInitialColon(link)
-- Find whether a faux display value has been added with the {{!}} magic
-- word.
local prePipe, display = link:match('^(.-)|(.*)$')
link = prePipe or link
-- Find the page, if it exists.
-- For links like [[#Bar]], the page will be nil.
local preHash, postHash = link:match('^(.-)#(.*)$')
local page
if not preHash then
-- We have a link like [[Foo]].
page = link
elseif preHash ~= '' then
-- We have a link like [[Foo#Bar]].
page = preHash
end
-- Find the section, if it exists.
local section
if postHash and postHash ~= '' then
section = postHash
end
return {
link = link,
page = page,
section = section,
display = display,
}
end
local function formatDisplay(parsed, options)
-- Formats a display string based on a parsed link table (matching the
-- output of parseLink) and an options table (matching the input options for
-- _formatLink).
local page = maybeItalicize(parsed.page, options.italicizePage)
local section = maybeItalicize(parsed.section, options.italicizeSection)
if (not section) then
return page
elseif (not page) then
return mw.ustring.format('§ %s', section)
else
return mw.ustring.format('%s § %s', page, section)
end
end
local function missingArgError(target)
mError = require('Module:Error')
return mError.error{message =
'Error: no link or target specified! ([[' .. target .. '#Errors|help]])'
}
end
--------------------------------------------------------------------------------
-- Main functions
--------------------------------------------------------------------------------
function p.formatLink(frame)
-- The formatLink export function, for use in templates.
yesno = require('Module:Yesno')
local args = getArgs(frame)
local link = args[1] or args.link
local target = args[3] or args.target
if not (link or target) then
return missingArgError('Template:Format link')
end
return p._formatLink{
link = link,
display = args[2] or args.display,
target = target,
italicizePage = yesno(args.italicizepage),
italicizeSection = yesno(args.italicizesection),
categorizeMissing = args.categorizemissing
}
end
function p._formatLink(options)
-- The formatLink export function, for use in modules.
checkType('_formatLink', 1, options, 'table')
local function check(key, expectedType) --for brevity
checkTypeForNamedArg(
'_formatLink', key, options[key], expectedType or 'string', true
)
end
check('link')
check('display')
check('target')
check('italicizePage', 'boolean')
check('italicizeSection', 'boolean')
check('categorizeMissing')
-- Normalize link and target and check that at least one is present
if options.link == '' then options.link = nil end
if options.target == '' then options.target = nil end
if not (options.link or options.target) then
return missingArgError('Module:Format link')
end
local parsed = parseLink(options.link)
local display = options.display or parsed.display
local catMissing = options.categorizeMissing
local category = ''
-- Find the display text
if not display then display = formatDisplay(parsed, options) end
-- Handle the target option if present
if options.target then
local parsedTarget = parseLink(options.target)
parsed.link = parsedTarget.link
parsed.page = parsedTarget.page
end
-- Test if page exists if a diagnostic category is specified
if catMissing and (mw.ustring.len(catMissing) > 0) then
local title = nil
if parsed.page then title = mw.title.new(parsed.page) end
if title and (not title.isExternal) then
local success, exists = pcall(function() return title.exists end)
if success and not exists then
category = mw.ustring.format('[[Category:%s]]', catMissing)
end
end
end
-- Format the result as a link
if parsed.link == display then
return mw.ustring.format('[[:%s]]%s', parsed.link, category)
else
return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category)
end
end
--------------------------------------------------------------------------------
-- Derived convenience functions
--------------------------------------------------------------------------------
function p.formatPages(options, pages)
-- Formats an array of pages using formatLink and the given options table,
-- and returns it as an array. Nil values are not allowed.
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink{
link = page,
categorizeMissing = options.categorizeMissing,
italicizePage = options.italicizePage,
italicizeSection = options.italicizeSection
}
end
return ret
end
return p
1253bdd2683ee4badc33856bfd5499b09a7dca1f
Module:Hatnote
828
87
191
190
2023-06-06T08:51:26Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Hatnote]]: w
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote --
-- --
-- This module produces hatnote links and links to related articles. It --
-- implements the {{hatnote}} and {{format link}} meta-templates and includes --
-- helper functions for other Lua hatnote modules. --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local yesno -- lazily initialise [[Module:Yesno]]
local formatLink -- lazily initialise [[Module:Format link]] ._formatLink
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
function p.defaultClasses(inline)
-- Provides the default hatnote classes as a space-separated string; useful
-- for hatnote-manipulation modules like [[Module:Hatnote group]].
return
(inline == 1 and 'hatnote-inline' or 'hatnote') .. ' ' ..
'navigation-not-searchable'
end
function p.disambiguate(page, disambiguator)
-- Formats a page title with a disambiguation parenthetical,
-- i.e. "Example" → "Example (disambiguation)".
checkType('disambiguate', 1, page, 'string')
checkType('disambiguate', 2, disambiguator, 'string', true)
disambiguator = disambiguator or 'disambiguation'
return mw.ustring.format('%s (%s)', page, disambiguator)
end
function p.findNamespaceId(link, removeColon)
-- Finds the namespace id (namespace number) of a link or a pagename. This
-- function will not work if the link is enclosed in double brackets. Colons
-- are trimmed from the start of the link by default. To skip colon
-- trimming, set the removeColon parameter to false.
checkType('findNamespaceId', 1, link, 'string')
checkType('findNamespaceId', 2, removeColon, 'boolean', true)
if removeColon ~= false then
link = removeInitialColon(link)
end
local namespace = link:match('^(.-):')
if namespace then
local nsTable = mw.site.namespaces[namespace]
if nsTable then
return nsTable.id
end
end
return 0
end
function p.makeWikitextError(msg, helpLink, addTrackingCategory, title)
-- Formats an error message to be returned to wikitext. If
-- addTrackingCategory is not false after being returned from
-- [[Module:Yesno]], and if we are not on a talk page, a tracking category
-- is added.
checkType('makeWikitextError', 1, msg, 'string')
checkType('makeWikitextError', 2, helpLink, 'string', true)
yesno = require('Module:Yesno')
title = title or mw.title.getCurrentTitle()
-- Make the help link text.
local helpText
if helpLink then
helpText = ' ([[' .. helpLink .. '|help]])'
else
helpText = ''
end
-- Make the category text.
local category
if not title.isTalkPage -- Don't categorise talk pages
and title.namespace ~= 2 -- Don't categorise userspace
and yesno(addTrackingCategory) ~= false -- Allow opting out
then
category = 'Hatnote templates with errors'
category = mw.ustring.format(
'[[%s:%s]]',
mw.site.namespaces[14].name,
category
)
else
category = ''
end
return mw.ustring.format(
'<strong class="error">Error: %s%s.</strong>%s',
msg,
helpText,
category
)
end
local curNs = mw.title.getCurrentTitle().namespace
p.missingTargetCat =
--Default missing target category, exported for use in related modules
((curNs == 0) or (curNs == 14)) and
'Articles with hatnote templates targeting a nonexistent page' or nil
function p.quote(title)
--Wraps titles in quotation marks. If the title starts/ends with a quotation
--mark, kerns that side as with {{-'}}
local quotationMarks = {
["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true
}
local quoteLeft, quoteRight = -- Test if start/end are quotation marks
quotationMarks[string.sub(title, 1, 1)],
quotationMarks[string.sub(title, -1, -1)]
if quoteLeft or quoteRight then
title = mw.html.create("span"):wikitext(title)
end
if quoteLeft then title:css("padding-left", "0.15em") end
if quoteRight then title:css("padding-right", "0.15em") end
return '"' .. tostring(title) .. '"'
end
--------------------------------------------------------------------------------
-- Hatnote
--
-- Produces standard hatnote text. Implements the {{hatnote}} template.
--------------------------------------------------------------------------------
function p.hatnote(frame)
local args = getArgs(frame)
local s = args[1]
if not s then
return p.makeWikitextError(
'no text specified',
'Template:Hatnote#Errors',
args.category
)
end
return p._hatnote(s, {
extraclasses = args.extraclasses,
selfref = args.selfref
})
end
function p._hatnote(s, options)
checkType('_hatnote', 1, s, 'string')
checkType('_hatnote', 2, options, 'table', true)
options = options or {}
local inline = options.inline
local hatnote = mw.html.create(inline == 1 and 'span' or 'div')
local extraclasses
if type(options.extraclasses) == 'string' then
extraclasses = options.extraclasses
end
hatnote
:attr('role', 'note')
:addClass(p.defaultClasses(inline))
:addClass(extraclasses)
:addClass(options.selfref and 'selfref' or nil)
:wikitext(s)
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' }
} .. tostring(hatnote)
end
return p
3ae1ed7094c5005ca0896395ec9a587287a0bef1
Module:Hatnote/styles.css
828
88
193
192
2023-06-06T08:51:27Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Hatnote/styles.css]]: w
sanitized-css
text/css
/* {{pp|small=y}} */
.hatnote {
font-style: italic;
}
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */
div.hatnote {
/* @noflip */
padding-left: 1.6em;
margin-bottom: 0.5em;
}
.hatnote i {
font-style: normal;
}
/* The templatestyles element inserts a link element before hatnotes.
* TODO: Remove link if/when WMF resolves T200206 */
.hatnote + link + .hatnote {
margin-top: -0.5em;
}
44680ffd6e888866df2cdfa0341af9c7b97da94c
Module:Hatnote list
828
89
195
194
2023-06-06T08:51:27Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Hatnote_list]]: w
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote list --
-- --
-- This module produces and formats lists for use in hatnotes. In particular, --
-- it implements the for-see list, i.e. lists of "For X, see Y" statements, --
-- as used in {{about}}, {{redirect}}, and their variants. Also introduced --
-- are andList & orList helpers for formatting lists with those conjunctions. --
--------------------------------------------------------------------------------
local mArguments --initialize lazily
local mFormatLink = require('Module:Format link')
local mHatnote = require('Module:Hatnote')
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
--------------------------------------------------------------------------------
-- List stringification helper functions
--
-- These functions are used for stringifying lists, usually page lists inside
-- the "Y" portion of "For X, see Y" for-see items.
--------------------------------------------------------------------------------
--default options table used across the list stringification functions
local stringifyListDefaultOptions = {
conjunction = "and",
separator = ",",
altSeparator = ";",
space = " ",
formatted = false
}
--Searches display text only
local function searchDisp(haystack, needle)
return string.find(
string.sub(haystack, (string.find(haystack, '|') or 0) + 1), needle
)
end
-- Stringifies a list generically; probably shouldn't be used directly
local function stringifyList(list, options)
-- Type-checks, defaults, and a shortcut
checkType("stringifyList", 1, list, "table")
if #list == 0 then return nil end
checkType("stringifyList", 2, options, "table", true)
options = options or {}
for k, v in pairs(stringifyListDefaultOptions) do
if options[k] == nil then options[k] = v end
end
local s = options.space
-- Format the list if requested
if options.formatted then
list = mFormatLink.formatPages(
{categorizeMissing = mHatnote.missingTargetCat}, list
)
end
-- Set the separator; if any item contains it, use the alternate separator
local separator = options.separator
for k, v in pairs(list) do
if searchDisp(v, separator) then
separator = options.altSeparator
break
end
end
-- Set the conjunction, apply Oxford comma, and force a comma if #1 has "§"
local conjunction = s .. options.conjunction .. s
if #list == 2 and searchDisp(list[1], "§") or #list > 2 then
conjunction = separator .. conjunction
end
-- Return the formatted string
return mw.text.listToText(list, separator .. s, conjunction)
end
--DRY function
function p.conjList (conj, list, fmt)
return stringifyList(list, {conjunction = conj, formatted = fmt})
end
-- Stringifies lists with "and" or "or"
function p.andList (...) return p.conjList("and", ...) end
function p.orList (...) return p.conjList("or", ...) end
--------------------------------------------------------------------------------
-- For see
--
-- Makes a "For X, see [[Y]]." list from raw parameters. Intended for the
-- {{about}} and {{redirect}} templates and their variants.
--------------------------------------------------------------------------------
--default options table used across the forSee family of functions
local forSeeDefaultOptions = {
andKeyword = 'and',
title = mw.title.getCurrentTitle().text,
otherText = 'other uses',
forSeeForm = 'For %s, see %s.',
}
--Collapses duplicate punctuation
local function punctuationCollapse (text)
local replacements = {
["%.%.$"] = ".",
["%?%.$"] = "?",
["%!%.$"] = "!",
["%.%]%]%.$"] = ".]]",
["%?%]%]%.$"] = "?]]",
["%!%]%]%.$"] = "!]]"
}
for k, v in pairs(replacements) do text = string.gsub(text, k, v) end
return text
end
-- Structures arguments into a table for stringification, & options
function p.forSeeArgsToTable (args, from, options)
-- Type-checks and defaults
checkType("forSeeArgsToTable", 1, args, 'table')
checkType("forSeeArgsToTable", 2, from, 'number', true)
from = from or 1
checkType("forSeeArgsToTable", 3, options, 'table', true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- maxArg's gotten manually because getArgs() and table.maxn aren't friends
local maxArg = 0
for k, v in pairs(args) do
if type(k) == 'number' and k > maxArg then maxArg = k end
end
-- Structure the data out from the parameter list:
-- * forTable is the wrapper table, with forRow rows
-- * Rows are tables of a "use" string & a "pages" table of pagename strings
-- * Blanks are left empty for defaulting elsewhere, but can terminate list
local forTable = {}
local i = from
local terminated = false
-- If there is extra text, and no arguments are given, give nil value
-- to not produce default of "For other uses, see foo (disambiguation)"
if options.extratext and i > maxArg then return nil end
-- Loop to generate rows
repeat
-- New empty row
local forRow = {}
-- On blank use, assume list's ended & break at end of this loop
forRow.use = args[i]
if not args[i] then terminated = true end
-- New empty list of pages
forRow.pages = {}
-- Insert first pages item if present
table.insert(forRow.pages, args[i + 1])
-- If the param after next is "and", do inner loop to collect params
-- until the "and"'s stop. Blanks are ignored: "1|and||and|3" → {1, 3}
while args[i + 2] == options.andKeyword do
if args[i + 3] then
table.insert(forRow.pages, args[i + 3])
end
-- Increment to next "and"
i = i + 2
end
-- Increment to next use
i = i + 2
-- Append the row
table.insert(forTable, forRow)
until terminated or i > maxArg
return forTable
end
-- Stringifies a table as formatted by forSeeArgsToTable
function p.forSeeTableToString (forSeeTable, options)
-- Type-checks and defaults
checkType("forSeeTableToString", 1, forSeeTable, "table", true)
checkType("forSeeTableToString", 2, options, "table", true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- Stringify each for-see item into a list
local strList = {}
if forSeeTable then
for k, v in pairs(forSeeTable) do
local useStr = v.use or options.otherText
local pagesStr =
p.andList(v.pages, true) or
mFormatLink._formatLink{
categorizeMissing = mHatnote.missingTargetCat,
link = mHatnote.disambiguate(options.title)
}
local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)
forSeeStr = punctuationCollapse(forSeeStr)
table.insert(strList, forSeeStr)
end
end
if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..'.')) end
-- Return the concatenated list
return table.concat(strList, ' ')
end
-- Produces a "For X, see [[Y]]" string from arguments. Expects index gaps
-- but not blank/whitespace values. Ignores named args and args < "from".
function p._forSee (args, from, options)
local forSeeTable = p.forSeeArgsToTable(args, from, options)
return p.forSeeTableToString(forSeeTable, options)
end
-- As _forSee, but uses the frame.
function p.forSee (frame, from, options)
mArguments = require('Module:Arguments')
return p._forSee(mArguments.getArgs(frame), from, options)
end
return p
d0828422b1aa0d0d0092d699d059c9e882260398
Module:Labelled list hatnote
828
90
197
196
2023-06-06T08:51:27Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Labelled_list_hatnote]]: w
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Labelled list --
-- --
-- This module does the core work of creating a hatnote composed of a list --
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", --
-- for {{see also}} and similar templates. --
--------------------------------------------------------------------------------
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local yesno --initialize lazily
local p = {}
-- Defaults global to this module
local defaults = {
label = 'See also', --Final fallback for label argument
labelForm = '%s: %s',
prefixes = {'label', 'label ', 'l'},
template = 'Module:Labelled list hatnote'
}
-- Localizable message strings
local msg = {
errorSuffix = '#Errors',
noInputWarning = 'no page names specified',
noOutputWarning =
"'''[[%s]] — no output: none of the target pages exist.'''"
}
-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays (args, prefixes)
-- Prefixes specify which parameters, in order, to check for display options
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
prefixes = prefixes or defaults.prefixes
local indices = {}
local sparsePages = {}
for k, v in pairs(args) do
if type(k) == 'number' then
indices[#indices + 1] = k
local display
for i = 1, #prefixes do
display = args[prefixes[i] .. k]
if display then break end
end
sparsePages[k] = display and
string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
end
end
table.sort(indices)
local pages = {}
for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end
return pages
end
--Helper function to get a page target from a processed page string
--e.g. "Page|Label" → "Page" or "Target" → "Target"
local function getTarget(pagename)
local pipe = string.find(pagename, '|')
return string.sub(pagename, 0, pipe and pipe - 1 or nil)
end
-- Produces a labelled pages-list hatnote.
-- The main frame (template definition) takes 1 or 2 arguments, for a singular
-- and (optionally) plural label respectively:
-- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}}
-- The resulting template takes pagename & label parameters normally.
function p.labelledList (frame)
mArguments = require('Module:Arguments')
yesno = require('Module:Yesno')
local labels = {frame.args[1] or defaults.label}
labels[2] = frame.args[2] or labels[1]
labels[3] = frame.args[3] --no defaulting
labels[4] = frame.args[4] --no defaulting
local template = frame:getParent():getTitle()
local args = mArguments.getArgs(frame, {parentOnly = true})
local pages = p.preprocessDisplays(args)
local options = {
category = yesno(args.category),
extraclasses = frame.args.extraclasses,
ifexists = yesno(frame.args.ifexists),
namespace = frame.args.namespace or args.namespace,
selfref = yesno(frame.args.selfref or args.selfref),
template = template
}
return p._labelledList(pages, labels, options)
end
function p._labelledList (pages, labels, options)
if options.ifexists then
for k = #pages, 1, -1 do --iterate backwards to allow smooth removals
local v = pages[k]
local title = mw.title.new(getTarget(v), namespace)
if (v == '') or title == nil or not title.exists then
table.remove(pages, k)
end
end
end
labels = labels or {}
label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
for k, v in pairs(pages) do
if mHatnote.findNamespaceId(v) ~= 0 then
label =
(
#pages == 1 and
(labels[3] or labels[1] or defaults.label) or
(labels[4] or labels[2] or defaults.label)
) or defaults.label
end
end
if #pages == 0 then
if options.ifexists then
mw.addWarning(
string.format(
msg.noOutputWarning, options.template or defaults.template
)
)
return ''
else
return mHatnote.makeWikitextError(
msg.noInputWarning,
(options.template or defaults.template) .. msg.errorSuffix,
options.category
)
end
end
local text = string.format(
options.labelForm or defaults.labelForm,
label,
mHatlist.andList(pages, true)
)
local hnOptions = {
extraclasses = options.extraclasses,
selfref = options.selfref
}
return mHatnote._hatnote(text, hnOptions)
end
return p
b7a8ba27cf6195e6427701b94e8d2acad3c40a21
Module:Navbar
828
91
199
198
2023-06-06T08:51:28Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Navbar]]: w
Scribunto
text/plain
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
local function get_title_arg(is_collapsible, template)
local title_arg = 1
if is_collapsible then title_arg = 2 end
if template then title_arg = 'template' end
return title_arg
end
local function choose_links(template, args)
-- The show table indicates the default displayed items.
-- view, talk, edit, hist, move, watch
-- TODO: Move to configuration.
local show = {true, true, true, false, false, false}
if template then
show[2] = false
show[3] = false
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
-- TODO: Consider removing TableTools dependency.
for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
local num = index[v]
if num then show[num] = true end
end
end
local remove_edit_link = args.noedit
if remove_edit_link then show[3] = false end
return show
end
local function add_link(link_description, ul, is_mini, font_style)
local l
if link_description.url then
l = {'[', '', ']'}
else
l = {'[[', '|', ']]'}
end
ul:tag('li')
:addClass('nv-' .. link_description.full)
:wikitext(l[1] .. link_description.link .. l[2])
:tag(is_mini and 'abbr' or 'span')
:attr('title', link_description.html_title)
:cssText(font_style)
:wikitext(is_mini and link_description.mini or link_description.full)
:done()
:wikitext(l[3])
:done()
end
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
if not title then
error(cfg.invalid_title .. title_text)
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
-- TODO: Get link_descriptions and show into the configuration module.
-- link_descriptions should be easier...
local link_descriptions = {
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
['link'] = title.fullText, ['url'] = false },
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
['link'] = talkpage, ['url'] = false },
{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
['link'] = title:fullUrl('action=edit'), ['url'] = true },
{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
['link'] = title:fullUrl('action=history'), ['url'] = true },
{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template',
['link'] = title:fullUrl('action=watch'), ['url'] = true }
}
local ul = mw.html.create('ul')
if has_brackets then
ul:addClass(cfg.classes.brackets)
:cssText(font_style)
end
for i, _ in ipairs(displayed_links) do
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
end
return ul:done()
end
function p._navbar(args)
-- TODO: We probably don't need both fontstyle and fontcolor...
local font_style = args.fontstyle
local font_color = args.fontcolor
local is_collapsible = args.collapsible
local is_mini = args.mini
local is_plain = args.plain
local collapsible_class = nil
if is_collapsible then
collapsible_class = cfg.classes.collapsible
if not is_plain then is_mini = 1 end
if font_color then
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
end
end
local navbar_style = args.style
local div = mw.html.create():tag('div')
div
:addClass(cfg.classes.navbar)
:addClass(cfg.classes.plainlinks)
:addClass(cfg.classes.horizontal_list)
:addClass(collapsible_class) -- we made the determination earlier
:cssText(navbar_style)
if is_mini then div:addClass(cfg.classes.mini) end
local box_text = (args.text or cfg.box_text) .. ' '
-- the concatenated space guarantees the box text is separated
if not (is_mini or is_plain) then
div
:tag('span')
:addClass(cfg.classes.box_text)
:cssText(font_style)
:wikitext(box_text)
end
local template = args.template
local displayed_links = choose_links(template, args)
local has_brackets = args.brackets
local title_arg = get_title_arg(is_collapsible, template)
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
div:node(list)
if is_collapsible then
local title_text_class
if is_mini then
title_text_class = cfg.classes.collapsible_title_mini
else
title_text_class = cfg.classes.collapsible_title_full
end
div:done()
:tag('div')
:addClass(title_text_class)
:cssText(font_style)
:wikitext(args[1])
end
local frame = mw.getCurrentFrame()
-- hlist -> navbar is best-effort to preserve old Common.css ordering.
return frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
} .. frame:extensionTag{
name = 'templatestyles', args = { src = cfg.templatestyles }
} .. tostring(div:done())
end
function p.navbar(frame)
return p._navbar(require('Module:Arguments').getArgs(frame))
end
return p
79f907e59eaa8bbf8dd50bb751933ebeaaa7eb17
Module:Navbar/configuration
828
92
201
200
2023-06-06T08:51:29Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Navbar/configuration]]: w
Scribunto
text/plain
return {
['templatestyles'] = 'Module:Navbar/styles.css',
['hlist_templatestyles'] = 'Hlist/styles.css',
['box_text'] = 'This box: ', -- default text box when not plain or mini
['title_namespace'] = 'Template', -- namespace to default to for title
['invalid_title'] = 'Invalid title ',
['classes'] = { -- set a line to nil if you don't want it
['navbar'] = 'navbar',
['plainlinks'] = 'plainlinks', -- plainlinks
['horizontal_list'] = 'hlist', -- horizontal list class
['mini'] = 'navbar-mini', -- class indicating small links in the navbar
['this_box'] = 'navbar-boxtext',
['brackets'] = 'navbar-brackets',
-- 'collapsible' is the key for a class to indicate the navbar is
-- setting up the collapsible element in addition to the normal
-- navbar.
['collapsible'] = 'navbar-collapse',
['collapsible_title_mini'] = 'navbar-ct-mini',
['collapsible_title_full'] = 'navbar-ct-full'
}
}
b007c336b17ec4bcd4d5a9dca9f8cba301662b55
Module:Navbar/styles.css
828
93
203
202
2023-06-06T08:51:29Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Navbar/styles.css]]: w
sanitized-css
text/css
/* {{pp|small=yes}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
9d4056f949b4f0b159e3d40dfb1a5f01e72f9571
Module:Navbox
828
94
205
204
2023-06-06T08:51:30Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Navbox]]: w
Scribunto
text/plain
require('strict')
local p = {}
local navbar = require('Module:Navbar')._navbar
local cfg = mw.loadData('Module:Navbox/configuration')
local getArgs -- lazily initialized
local args
local format = string.format
local function striped(wikitext, border)
-- Return wikitext with markers replaced for odd/even striping.
-- Child (subgroup) navboxes are flagged with a category that is removed
-- by parent navboxes. The result is that the category shows all pages
-- where a child navbox is not contained in a parent navbox.
local orphanCat = cfg.category.orphan
if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part
if args[cfg.arg.evenodd] then
if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then
first, second = second, first
else
first = args[cfg.arg.evenodd]
second = first
end
end
local changer
if first == second then
changer = first
else
local index = 0
changer = function (code)
if code == '0' then
-- Current occurrence is for a group before a nested table.
-- Set it to first as a valid although pointless class.
-- The next occurrence will be the first row after a title
-- in a subgroup and will also be first.
index = 0
return first
end
index = index + 1
return index % 2 == 1 and first or second
end
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count
end
local function processItem(item, nowrapitems)
if item:sub(1, 2) == '{|' then
-- Applying nowrap to lines in a table does not make sense.
-- Add newlines to compensate for trim of x in |parm=x in a template.
return '\n' .. item ..'\n'
end
if nowrapitems == cfg.keyword.nowrapitems_yes then
local lines = {}
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
if prefix and not content:match(cfg.pattern.nowrap) then
line = format(cfg.nowrap_item, prefix, content)
end
table.insert(lines, line)
end
item = table.concat(lines, '\n')
end
if item:match('^[*:;#]') then
return '\n' .. item ..'\n'
end
return item
end
local function has_navbar()
return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off
and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain
and (
args[cfg.arg.name]
or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '')
~= cfg.pattern.navbox
)
end
local function renderNavBar(titleCell)
if has_navbar() then
titleCell:wikitext(navbar{
[cfg.navbar.name] = args[cfg.arg.name],
[cfg.navbar.mini] = 1,
[cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' ..
(args[cfg.arg.titlestyle] or '') ..
';background:none transparent;border:none;box-shadow:none;padding:0;'
})
end
end
local function renderTitleRow(tbl)
if not args[cfg.arg.title] then return end
local titleRow = tbl:tag('tr')
local titleCell = titleRow:tag('th'):attr('scope', 'col')
local titleColspan = 2
if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end
if args[cfg.arg.image] then titleColspan = titleColspan + 1 end
titleCell
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.titlestyle])
:addClass(cfg.class.navbox_title)
:attr('colspan', titleColspan)
renderNavBar(titleCell)
titleCell
:tag('div')
-- id for aria-labelledby attribute
:attr('id', mw.uri.anchorEncode(args[cfg.arg.title]))
:addClass(args[cfg.arg.titleclass])
:css('font-size', '114%')
:css('margin', '0 4em')
:wikitext(processItem(args[cfg.arg.title]))
end
local function getAboveBelowColspan()
local ret = 2
if args[cfg.arg.imageleft] then ret = ret + 1 end
if args[cfg.arg.image] then ret = ret + 1 end
return ret
end
local function renderAboveRow(tbl)
if not args[cfg.arg.above] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.aboveclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.abovestyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
-- id for aria-labelledby attribute, if no title
:attr('id', (not args[cfg.arg.title]) and mw.uri.anchorEncode(args[cfg.arg.above]) or nil)
:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))
end
local function renderBelowRow(tbl)
if not args[cfg.arg.below] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.belowclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.belowstyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))
end
local function renderListRow(tbl, index, listnum, listnums_size)
local row = tbl:tag('tr')
if index == 1 and args[cfg.arg.imageleft] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 2px 0 0')
:cssText(args[cfg.arg.imageleftstyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.imageleft]))
end
local group_and_num = format(cfg.arg.group_and_num, listnum)
local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
if args[group_and_num] then
local groupCell = row:tag('th')
-- id for aria-labelledby attribute, if lone group with no title or above
if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
groupCell
:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
end
groupCell
:attr('scope', 'row')
:addClass(cfg.class.navbox_group)
:addClass(args[cfg.arg.groupclass])
:cssText(args[cfg.arg.basestyle])
-- If groupwidth not specified, minimize width
:css('width', args[cfg.arg.groupwidth] or '1%')
groupCell
:cssText(args[cfg.arg.groupstyle])
:cssText(args[groupstyle_and_num])
:wikitext(args[group_and_num])
end
local listCell = row:tag('td')
if args[group_and_num] then
listCell
:addClass(cfg.class.navbox_list_with_group)
else
listCell:attr('colspan', 2)
end
if not args[cfg.arg.groupwidth] then
listCell:css('width', '100%')
end
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing
if index % 2 == 1 then
rowstyle = args[cfg.arg.oddstyle]
else
rowstyle = args[cfg.arg.evenstyle]
end
local list_and_num = format(cfg.arg.list_and_num, listnum)
local listText = args[list_and_num]
local oddEven = cfg.marker.oddeven
if listText:sub(1, 12) == '</div><table' then
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
end
local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)
listCell
:css('padding', '0')
:cssText(args[cfg.arg.liststyle])
:cssText(rowstyle)
:cssText(args[liststyle_and_num])
:addClass(cfg.class.navbox_list)
:addClass(cfg.class.navbox_part .. oddEven)
:addClass(args[cfg.arg.listclass])
:addClass(args[listclass_and_num])
:tag('div')
:css('padding',
(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em'
)
:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))
if index == 1 and args[cfg.arg.image] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 0 0 2px')
:cssText(args[cfg.arg.imagestyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.image]))
end
end
local function has_list_class(htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, _ in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles()
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles)
local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar() and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because most navboxes will emit only
-- one of these classes [hlist_note]
return hlist_styles .. plainlist_styles
end
local function needsHorizontalLists(border)
if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then
return false
end
return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)
end
local function hasBackgroundColors()
for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,
cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('background', 1, true) then
return true
end
end
return false
end
local function hasBorders()
for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,
cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('border', 1, true) then
return true
end
end
return false
end
local function isIllegible()
local styleratio = require('Module:Color contrast')._styleratio
for key, style in pairs(args) do
if tostring(key):match(cfg.pattern.style) then
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
return true
end
end
end
return false
end
local function getTrackingCategories(border)
local cats = {}
if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end
if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end
if isIllegible() then table.insert(cats, cfg.category.illegible) end
if hasBorders() then table.insert(cats, cfg.category.borders) end
return cats
end
local function renderTrackingCategories(builder, border)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox
or subpage == cfg.keyword.subpage_testcases then return end
for _, cat in ipairs(getTrackingCategories(border)) do
builder:wikitext('[[Category:' .. cat .. ']]')
end
end
local function renderMainTable(border, listnums)
local tbl = mw.html.create('table')
:addClass(cfg.class.nowraplinks)
:addClass(args[cfg.arg.bodyclass])
local state = args[cfg.arg.state]
if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then
if state == cfg.keyword.state_collapsed then
state = cfg.class.collapsed
end
tbl
:addClass(cfg.class.collapsible)
:addClass(state or cfg.class.autocollapse)
end
tbl:css('border-spacing', 0)
if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then
tbl
:addClass(cfg.class.navbox_subgroup)
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
else -- regular navbox - bodystyle and style will be applied to the wrapper table
tbl
:addClass(cfg.class.navbox_inner)
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args[cfg.arg.innerstyle])
renderTitleRow(tbl)
renderAboveRow(tbl)
local listnums_size = #listnums
for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum, listnums_size)
end
renderBelowRow(tbl)
return tbl
end
local function add_navbox_styles(hiding_templatestyles)
local frame = mw.getCurrentFrame()
-- This is a lambda so that it doesn't need the frame as a parameter
local function add_user_styles(templatestyles)
if templatestyles and templatestyles ~= '' then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
end
return ''
end
-- get templatestyles. load base from config so that Lua only needs to do
-- the work once of parser tag expansion
local base_templatestyles = cfg.templatestyles
local templatestyles = add_user_styles(args[cfg.arg.templatestyles])
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])
-- The 'navbox-styles' div exists to wrap the styles to work around T200206
-- more elegantly. Instead of combinatorial rules, this ends up being linear
-- number of CSS rules.
return mw.html.create('div')
:addClass(cfg.class.navbox_styles)
:wikitext(
add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles'
base_templatestyles ..
templatestyles ..
child_templatestyles ..
table.concat(hiding_templatestyles)
)
:done()
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
function p._navbox(navboxArgs)
args = navboxArgs
local hiding_templatestyles = move_hiding_templatestyles(args)
local listnums = {}
for k, _ in pairs(args) do
if type(k) == 'string' then
local listnum = k:match(cfg.pattern.listnum)
if listnum then table.insert(listnums, tonumber(listnum)) end
end
end
table.sort(listnums)
local border = mw.text.trim(args[cfg.arg.border] or args[1] or '')
if border == cfg.keyword.border_child then
border = cfg.keyword.border_subgroup
end
-- render the main body of the navbox
local tbl = renderMainTable(border, listnums)
local res = mw.html.create()
-- render the appropriate wrapper for the navbox, based on the border param
if border == cfg.keyword.border_none then
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]
and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(
args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]
)
)
else
nav:attr('aria-label', cfg.aria_label)
end
elseif border == cfg.keyword.border_subgroup then
-- We assume that this navbox is being rendered in a list cell of a
-- parent navbox, and is therefore inside a div with padding:0em 0.25em.
-- We start with a </div> to avoid the padding being applied, and at the
-- end add a <div> to balance out the parent's </div>
res
:wikitext('</div>')
:node(tbl)
:wikitext('<div>')
else
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass(cfg.class.navbox)
:addClass(args[cfg.arg.navboxclass])
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
:css('padding', '3px')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above]
or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1])
)
else
nav:attr('aria-label', cfg.aria_label)
end
end
if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then
renderTrackingCategories(res, border)
end
return striped(tostring(res), border)
end
function p.navbox(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame, {wrappers = {cfg.pattern.navbox}})
-- Read the arguments in the order they'll be output in, to make references
-- number in the right order.
local _
_ = args[cfg.arg.title]
_ = args[cfg.arg.above]
-- Limit this to 20 as covering 'most' cases (that's a SWAG) and because
-- iterator approach won't work here
for i = 1, 20 do
_ = args[format(cfg.arg.group_and_num, i)]
_ = args[format(cfg.arg.list_and_num, i)]
end
_ = args[cfg.arg.below]
return p._navbox(args)
end
return p
05be9a97c035ab3f0fac69423779e261949d473c
Module:Navbox/configuration
828
95
207
206
2023-06-06T08:51:31Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Navbox/configuration]]: w
Scribunto
text/plain
return {
aria_label = 'Navbox',
nowrap_item = '%s<span class="nowrap">%s</span>',
templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }
},
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
-- do not localize marker table
marker = {
oddeven = '\127_ODDEVEN_\127',
restart = '\127_ODDEVEN0_\127',
regex = '\127_ODDEVEN(%d?)_\127'
},
category = {
orphan = '[[Category:Navbox orphans]]',
horizontal_lists = 'Navigational boxes without horizontal lists',
background_colors = 'Navboxes using background colours',
illegible = 'Potentially illegible navboxes',
borders = 'Navboxes using borders',
},
keyword = {
border_subgroup = 'subgroup',
border_child = 'child',
border_none = 'none',
evenodd_swap = 'swap',
navbar_off = 'off',
navbar_plain = 'plain',
nocat_false = 'false',
nowrapitems_yes = 'yes',
orphan_yes = 'yes',
state_collapsed = 'collapsed',
state_off = 'off',
state_plain = 'plain',
subpage_doc = 'doc',
subpage_sandbox = 'sandbox',
subpage_testcases = 'testcases',
tracking_no = 'no'
},
class = {
autocollapse = 'autocollapse',
collapsible = 'mw-collapsible',
collapsed = 'mw-collapsed',
-- Warning
navbox = 'navbox', -- WMF currently hides 'navbox' from mobile,
-- so you probably shouldn't change the navbox class.
navbox_abovebelow = 'navbox-abovebelow',
navbox_group = 'navbox-group',
navbox_image = 'navbox-image',
navbox_inner = 'navbox-inner',
navbox_list = 'navbox-list',
navbox_list_with_group = 'navbox-list-with-group',
navbox_part = 'navbox-', -- do not l10n
navbox_styles = 'navbox-styles',
navbox_subgroup = 'navbox-subgroup',
navbox_title = 'navbox-title', -- l10n only if you change pattern.navbox_title below
navbox_odd_part = 'odd', -- do not l10n
navbox_even_part = 'even', -- do not l10n
nomobile = 'nomobile',
nowraplinks = 'nowraplinks',
noviewer = 'noviewer' -- used to remove images from MediaViewer
},
pattern = {
listnum = '^list(%d+)$',
class = 'class',
sandbox = '/sandbox$',
navbox = 'Template:Navbox',
nowrap = '^<span class="nowrap">',
style = 'style$',
navbox_title = '<th[^>]*"navbox%-title"',
hlist = 'hlist',
plainlist = 'plainlist',
},
arg = {
above = 'above',
aboveclass = 'aboveclass',
abovestyle = 'abovestyle',
basestyle = 'basestyle',
bodyclass = 'bodyclass',
bodystyle = 'bodystyle',
border = 'border',
below = 'below',
belowclass = 'belowclass',
belowstyle = 'belowstyle',
evenodd = 'evenodd',
evenstyle = 'evenstyle',
group1 = 'group1',
group2 = 'group2',
group_and_num = 'group%d',
groupstyle_and_num = 'group%dstyle',
groupclass = 'groupclass',
groupstyle = 'groupstyle',
groupwidth = 'groupwidth',
innerstyle = 'innerstyle',
image = 'image',
imageclass = 'imageclass',
imageleft = 'imageleft',
imageleftstyle = 'imageleftstyle',
imagesetyle = 'imagestyle',
list_and_num = 'list%d',
listclass_and_num = 'list%dclass',
liststyle_and_num = 'list%dstyle',
list1padding = 'list1padding',
listclass = 'listclass',
listpadding = 'listpadding',
liststyle = 'liststyle',
name = 'name',
navbar = 'navbar',
navboxclass = 'navboxclass',
nocat = 'nocat',
nowrapitems = 'nowrapitems',
oddstyle = 'oddstyle',
orphan = 'orphan',
state = 'state',
style = 'style',
templatestyles = 'templatestyles',
child_templatestyles = 'child templatestyles',
title = 'title',
titleclass = 'titleclass',
titlestyle = 'titlestyle',
tracking = 'tracking'
},
-- names of navbar arguments
navbar = {
name = 1,
fontstyle = 'fontstyle',
mini = 'mini'
}
}
4148736fd32a93636c0413e73ed38afaef065ec9
Module:Navbox/styles.css
828
96
209
208
2023-06-06T08:51:31Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Navbox/styles.css]]: w
sanitized-css
text/css
/* {{pp|small=y}} */
.navbox {
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */
.navbox + .navbox-styles + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em;
line-height: 1.5em;
text-align: center;
}
.navbox-group {
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd;
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox-list-with-group {
text-align: left;
border-left-width: 2px;
border-left-style: solid;
}
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: #ccf; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: #ddf; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background-color: #f7f7f7;
}
.navbox-odd {
background-color: transparent;
}
/* TODO: figure out how to remove reliance on td as structure */
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
}
e80b0d7a5770e6e105dab832deb6c37a5245ebc6
Module:Protection banner
828
97
211
210
2023-06-06T08:51:32Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Protection_banner]]: w
Scribunto
text/plain
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- Initialise necessary modules.
require('strict')
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main
local yesno = require('Module:Yesno')
-- Lazily initialise modules and objects we don't always need.
local getArgs, makeMessageBox, lang
-- Set constants.
local CONFIG_MODULE = 'Module:Protection banner/config'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function makeCategoryLink(cat, sort)
if cat then
return string.format(
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
cat,
sort
)
end
end
-- Validation function for the expiry and the protection date
local function validateDate(dateString, dateType)
if not lang then
lang = mw.language.getContentLanguage()
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
result = tonumber(result)
if result then
return result
end
end
error(string.format(
'invalid %s: %s',
dateType,
tostring(dateString)
), 4)
end
local function makeFullUrl(page, query, display)
return string.format(
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
display
)
end
-- Given a directed graph formatted as node -> table of direct successors,
-- get a table of all nodes reachable from a given node (though always
-- including the given node).
local function getReachableNodes(graph, start)
local toWalk, retval = {[start] = true}, {}
while true do
-- Can't use pairs() since we're adding and removing things as we're iterating
local k = next(toWalk) -- This always gets the "first" key
if k == nil then
return retval
end
toWalk[k] = nil
retval[k] = true
for _,v in ipairs(graph[k]) do
if not retval[v] then
toWalk[v] = true
end
end
end
end
--------------------------------------------------------------------------------
-- Protection class
--------------------------------------------------------------------------------
local Protection = {}
Protection.__index = Protection
Protection.supportedActions = {
edit = true,
move = true,
autoreview = true,
upload = true
}
Protection.bannerConfigFields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
function Protection.new(args, cfg, title)
local obj = {}
obj._cfg = cfg
obj.title = title or mw.title.getCurrentTitle()
-- Set action
if not args.action then
obj.action = 'edit'
elseif Protection.supportedActions[args.action] then
obj.action = args.action
else
error(string.format(
'invalid action: %s',
tostring(args.action)
), 3)
end
-- Set level
obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)
if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then
-- Users need to be autoconfirmed to move pages anyway, so treat
-- semi-move-protected pages as unprotected.
obj.level = '*'
end
-- Set expiry
local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)
if effectiveExpiry == 'infinity' then
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
end
-- Set reason
if args[1] then
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
end
end
-- Set protection date
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
end
-- Set banner config
do
obj.bannerConfig = {}
local configTables = {}
if cfg.banners[obj.action] then
configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]
end
if cfg.defaultBanners[obj.action] then
configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]
configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(Protection.bannerConfigFields) do
for j, t in ipairs(configTables) do
if t[field] then
obj.bannerConfig[field] = t[field]
break
end
end
end
end
return setmetatable(obj, Protection)
end
function Protection:isUserScript()
-- Whether the page is a user JavaScript or CSS page.
local title = self.title
return title.namespace == 2 and (
title.contentModel == 'javascript' or title.contentModel == 'css'
)
end
function Protection:isProtected()
return self.level ~= '*'
end
function Protection:shouldShowLock()
-- Whether we should output a banner/padlock
return self:isProtected() and not self:isUserScript()
end
-- Whether this page needs a protection category.
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock
function Protection:isTemporary()
return type(self.expiry) == 'number'
end
function Protection:makeProtectionCategory()
if not self:shouldHaveProtectionCategory() then
return ''
end
local cfg = self._cfg
local title = self.title
-- Get the expiry key fragment.
local expiryFragment
if self.expiry == 'indef' then
expiryFragment = self.expiry
elseif type(self.expiry) == 'number' then
expiryFragment = 'temp'
end
-- Get the namespace key fragment.
local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]
if not namespaceFragment and title.namespace % 2 == 1 then
namespaceFragment = 'talk'
end
-- Define the order that key fragments are tested in. This is done with an
-- array of tables containing the value to be tested, along with its
-- position in the cfg.protectionCategories table.
local order = {
{val = expiryFragment, keypos = 1},
{val = namespaceFragment, keypos = 2},
{val = self.reason, keypos = 3},
{val = self.level, keypos = 4},
{val = self.action, keypos = 5}
}
--[[
-- The old protection templates used an ad-hoc protection category system,
-- with some templates prioritising namespaces in their categories, and
-- others prioritising the protection reason. To emulate this in this module
-- we use the config table cfg.reasonsWithNamespacePriority to set the
-- reasons for which namespaces have priority over protection reason.
-- If we are dealing with one of those reasons, move the namespace table to
-- the end of the order table, i.e. give it highest priority. If not, the
-- reason should have highest priority, so move that to the end of the table
-- instead.
--]]
table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))
--[[
-- Define the attempt order. Inactive subtables (subtables with nil "value"
-- fields) are moved to the end, where they will later be given the key
-- "all". This is to cut down on the number of table lookups in
-- cfg.protectionCategories, which grows exponentially with the number of
-- non-nil keys. We keep track of the number of active subtables with the
-- noActive parameter.
--]]
local noActive, attemptOrder
do
local active, inactive = {}, {}
for i, t in ipairs(order) do
if t.val then
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
--[[
-- Check increasingly generic key combinations until we find a match. If a
-- specific category exists for the combination of key fragments we are
-- given, that match will be found first. If not, we keep trying different
-- key fragment combinations until we match using the key
-- "all-all-all-all-all".
--
-- To generate the keys, we index the key subtables using a binary matrix
-- with indexes i and j. j is only calculated up to the number of active
-- subtables. For example, if there were three active subtables, the matrix
-- would look like this, with 0 corresponding to the key fragment "all", and
-- 1 corresponding to other key fragments.
--
-- j 1 2 3
-- i
-- 1 1 1 1
-- 2 0 1 1
-- 3 1 0 1
-- 4 0 0 1
-- 5 1 1 0
-- 6 0 1 0
-- 7 1 0 0
-- 8 0 0 0
--
-- Values of j higher than the number of active subtables are set
-- to the string "all".
--
-- A key for cfg.protectionCategories is constructed for each value of i.
-- The position of the value in the key is determined by the keypos field in
-- each subtable.
--]]
local cats = cfg.protectionCategories
for i = 1, 2^noActive do
local key = {}
for j, t in ipairs(attemptOrder) do
if j > noActive then
key[t.keypos] = 'all'
else
local quotient = i / 2 ^ (j - 1)
quotient = math.ceil(quotient)
if quotient % 2 == 1 then
key[t.keypos] = t.val
else
key[t.keypos] = 'all'
end
end
end
key = table.concat(key, '|')
local attempt = cats[key]
if attempt then
return makeCategoryLink(attempt, title.text)
end
end
return ''
end
function Protection:isIncorrect()
local expiry = self.expiry
return not self:shouldHaveProtectionCategory()
or type(expiry) == 'number' and expiry < os.time()
end
function Protection:isTemplateProtectedNonTemplate()
local action, namespace = self.action, self.title.namespace
return self.level == 'templateeditor'
and (
(action ~= 'edit' and action ~= 'move')
or (namespace ~= 10 and namespace ~= 828)
)
end
function Protection:makeCategoryLinks()
local msg = self._cfg.msg
local ret = {self:makeProtectionCategory()}
if self:isIncorrect() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-incorrect'],
self.title.text
)
end
if self:isTemplateProtectedNonTemplate() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-template'],
self.title.text
)
end
return table.concat(ret)
end
--------------------------------------------------------------------------------
-- Blurb class
--------------------------------------------------------------------------------
local Blurb = {}
Blurb.__index = Blurb
Blurb.bannerTextFields = {
text = true,
explanation = true,
tooltip = true,
alt = true,
link = true
}
function Blurb.new(protectionObj, args, cfg)
return setmetatable({
_cfg = cfg,
_protectionObj = protectionObj,
_args = args
}, Blurb)
end
-- Private methods --
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
local success, date = pcall(
lang.formatDate,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. tostring(num)
)
if success then
return date
end
end
function Blurb:_getExpandedMessage(msgKey)
return self:_substituteParameters(self._cfg.msg[msgKey])
end
function Blurb:_substituteParameters(msg)
if not self._params then
local parameterFuncs = {}
parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter
parameterFuncs.EDITREQUEST = self._makeEditRequestParameter
parameterFuncs.EXPIRY = self._makeExpiryParameter
parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter
parameterFuncs.IMAGELINK = self._makeImageLinkParameter
parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter
parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter
parameterFuncs.PAGETYPE = self._makePagetypeParameter
parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter
parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter
parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter
parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter
parameterFuncs.TALKPAGE = self._makeTalkPageParameter
parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter
parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter
parameterFuncs.VANDAL = self._makeVandalTemplateParameter
self._params = setmetatable({}, {
__index = function (t, k)
local param
if parameterFuncs[k] then
param = parameterFuncs[k](self)
end
param = param or ''
t[k] = param
return param
end
})
end
msg = msg:gsub('${(%u+)}', self._params)
return msg
end
function Blurb:_makeCurrentVersionParameter()
-- A link to the page history or the move log, depending on the kind of
-- protection.
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'move' then
-- We need the move log link.
return makeFullUrl(
'Special:Log',
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
)
else
-- We need the history link.
return makeFullUrl(
pagename,
{action = 'history'},
self:_getExpandedMessage('current-version-edit-display')
)
end
end
function Blurb:_makeEditRequestParameter()
local mEditRequest = require('Module:Submit an edit request')
local action = self._protectionObj.action
local level = self._protectionObj.level
-- Get the edit request type.
local requestType
if action == 'edit' then
if level == 'autoconfirmed' then
requestType = 'semi'
elseif level == 'extendedconfirmed' then
requestType = 'extended'
elseif level == 'templateeditor' then
requestType = 'template'
end
end
requestType = requestType or 'full'
-- Get the display value.
local display = self:_getExpandedMessage('edit-request-display')
return mEditRequest._link{type = requestType, display = display}
end
function Blurb:_makeExpiryParameter()
local expiry = self._protectionObj.expiry
if type(expiry) == 'number' then
return self:_formatDate(expiry)
else
return expiry
end
end
function Blurb:_makeExplanationBlurbParameter()
-- Cover special cases first.
if self._protectionObj.title.namespace == 8 then
-- MediaWiki namespace
return self:_getExpandedMessage('explanation-blurb-nounprotect')
end
-- Get explanation blurb table keys
local action = self._protectionObj.action
local level = self._protectionObj.level
local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'
-- Find the message in the explanation blurb table and substitute any
-- parameters.
local explanations = self._cfg.explanationBlurbs
local msg
if explanations[action][level] and explanations[action][level][talkKey] then
msg = explanations[action][level][talkKey]
elseif explanations[action][level] and explanations[action][level].default then
msg = explanations[action][level].default
elseif explanations[action].default and explanations[action].default[talkKey] then
msg = explanations[action].default[talkKey]
elseif explanations[action].default and explanations[action].default.default then
msg = explanations[action].default.default
else
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
level,
talkKey
), 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeImageLinkParameter()
local imageLinks = self._cfg.imageLinks
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if imageLinks[action][level] then
msg = imageLinks[action][level]
elseif imageLinks[action].default then
msg = imageLinks[action].default
else
msg = imageLinks.edit.default
end
return self:_substituteParameters(msg)
end
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
end
end
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
end
end
function Blurb:_makePagetypeParameter()
local pagetypes = self._cfg.pagetypes
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or error('no default pagetype defined', 8)
end
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._cfg.protectionBlurbs
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionBlurbs[action][level] then
msg = protectionBlurbs[action][level]
elseif protectionBlurbs[action].default then
msg = protectionBlurbs[action].default
elseif protectionBlurbs.edit.default then
msg = protectionBlurbs.edit.default
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionDateParameter()
local protectionDate = self._protectionObj.protectionDate
if type(protectionDate) == 'number' then
return self:_formatDate(protectionDate)
else
return protectionDate
end
end
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._cfg.protectionLevels
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionLevels[action][level] then
msg = protectionLevels[action][level]
elseif protectionLevels[action].default then
msg = protectionLevels[action].default
elseif protectionLevels.edit.default then
msg = protectionLevels.edit.default
else
error('no protection level defined for protectionLevels.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionLogParameter()
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'autoreview' then
-- We need the pending changes log.
return makeFullUrl(
'Special:Log',
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
)
else
-- We need the protection log.
return makeFullUrl(
'Special:Log',
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
)
end
end
function Blurb:_makeTalkPageParameter()
return string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
self._protectionObj.title.text,
self._args.section or 'top',
self:_getExpandedMessage('talk-page-link-display')
)
end
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
end
end
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
end
end
function Blurb:_makeVandalTemplateParameter()
return mw.getCurrentFrame():expandTemplate{
title="vandal-m",
args={self._args.user or self._protectionObj.title.baseText}
}
end
-- Public methods --
function Blurb:makeBannerText(key)
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
'"%s" is not a valid banner config field',
tostring(key)
), 2)
end
-- Generate the text.
local msg = self._protectionObj.bannerConfig[key]
if type(msg) == 'string' then
return self:_substituteParameters(msg)
elseif type(msg) == 'function' then
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
error(string.format(
'bad output from banner config function with key "%s"'
.. ' (expected string, got %s)',
tostring(key),
type(msg)
), 4)
end
return self:_substituteParameters(msg)
end
end
--------------------------------------------------------------------------------
-- BannerTemplate class
--------------------------------------------------------------------------------
local BannerTemplate = {}
BannerTemplate.__index = BannerTemplate
function BannerTemplate.new(protectionObj, cfg)
local obj = {}
obj._cfg = cfg
-- Set the image filename.
local imageFilename = protectionObj.bannerConfig.image
if imageFilename then
obj._imageFilename = imageFilename
else
-- If an image filename isn't specified explicitly in the banner config,
-- generate it from the protection status and the namespace.
local action = protectionObj.action
local level = protectionObj.level
local namespace = protectionObj.title.namespace
local reason = protectionObj.reason
-- Deal with special cases first.
if (
namespace == 10
or namespace == 828
or reason and obj._cfg.indefImageReasons[reason]
)
and action == 'edit'
and level == 'sysop'
and not protectionObj:isTemporary()
then
-- Fully protected modules and templates get the special red "indef"
-- padlock.
obj._imageFilename = obj._cfg.msg['image-filename-indef']
else
-- Deal with regular protection types.
local images = obj._cfg.images
if images[action] then
if images[action][level] then
obj._imageFilename = images[action][level]
elseif images[action].default then
obj._imageFilename = images[action].default
end
end
end
end
return setmetatable(obj, BannerTemplate)
end
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._cfg.msg['image-filename-default']
or 'Transparent.gif'
return makeFileLink{
file = filename,
size = (self.imageWidth or 20) .. 'px',
alt = self._imageAlt,
link = self._imageLink,
caption = self.imageCaption
}
end
--------------------------------------------------------------------------------
-- Banner class
--------------------------------------------------------------------------------
local Banner = setmetatable({}, BannerTemplate)
Banner.__index = Banner
function Banner.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 40
obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.
obj._reasonText = blurbObj:makeBannerText('text')
obj._explanationText = blurbObj:makeBannerText('explanation')
obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.
return setmetatable(obj, Banner)
end
function Banner:__tostring()
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local mbargs = {
page = self._page,
type = 'protection',
image = self:renderImage(),
text = string.format(
"'''%s'''%s",
reasonText,
explanationText and '<br />' .. explanationText or ''
)
}
return makeMessageBox('mbox', mbargs)
end
--------------------------------------------------------------------------------
-- Padlock class
--------------------------------------------------------------------------------
local Padlock = setmetatable({}, BannerTemplate)
Padlock.__index = Padlock
function Padlock.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 20
obj.imageCaption = blurbObj:makeBannerText('tooltip')
obj._imageAlt = blurbObj:makeBannerText('alt')
obj._imageLink = blurbObj:makeBannerText('link')
obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]
or cfg.padlockIndicatorNames.default
or 'pp-default'
return setmetatable(obj, Padlock)
end
function Padlock:__tostring()
local frame = mw.getCurrentFrame()
-- The nowiki tag helps prevent whitespace at the top of articles.
return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{
name = 'indicator',
args = {name = self._indicatorName},
content = self:renderImage()
}
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- This is used for testing purposes.
return {
Protection = Protection,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Banner = Banner,
Padlock = Padlock,
}
end
function p._main(args, cfg, title)
args = args or {}
cfg = cfg or require(CONFIG_MODULE)
local protectionObj = Protection.new(args, cfg, title)
local ret = {}
-- If a page's edit protection is equally or more restrictive than its
-- protection from some other action, then don't bother displaying anything
-- for the other action (except categories).
if not yesno(args.catonly) and (protectionObj.action == 'edit' or
args.demolevel or
not getReachableNodes(
cfg.hierarchy,
protectionObj.level
)[effectiveProtectionLevel('edit', protectionObj.title)])
then
-- Initialise the blurb object
local blurbObj = Blurb.new(protectionObj, args, cfg)
-- Render the banner
if protectionObj:shouldShowLock() then
ret[#ret + 1] = tostring(
(yesno(args.small) and Padlock or Banner)
.new(protectionObj, blurbObj, cfg)
)
end
end
-- Render the categories
if yesno(args.category) ~= false then
ret[#ret + 1] = protectionObj:makeCategoryLinks()
end
return table.concat(ret)
end
function p.main(frame, cfg)
cfg = cfg or require(CONFIG_MODULE)
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
-- Find user args, and use the parent frame if we are being called from a
-- wrapper template.
getArgs = getArgs or require('Module:Arguments').getArgs
local userArgs = getArgs(frame, {
parentOnly = defaultArgs,
frameOnly = not defaultArgs
})
-- Build the args table. User-specified args overwrite default args.
local args = {}
for k, v in pairs(defaultArgs or {}) do
args[k] = v
end
for k, v in pairs(userArgs) do
args[k] = v
end
return p._main(args, cfg)
end
return p
894f0884d4c2da1ce19d385b96f59af654b0946a
Module:Protection banner/config
828
98
213
212
2023-06-06T08:51:33Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Protection_banner/config]]: w
Scribunto
text/plain
-- This module provides configuration data for [[Module:Protection banner]].
return {
--------------------------------------------------------------------------------
--
-- BANNER DATA
--
--------------------------------------------------------------------------------
--[[
-- Banner data consists of six fields:
-- * text - the main protection text that appears at the top of protection
-- banners.
-- * explanation - the text that appears below the main protection text, used
-- to explain the details of the protection.
-- * tooltip - the tooltip text you see when you move the mouse over a small
-- padlock icon.
-- * link - the page that the small padlock icon links to.
-- * alt - the alt text for the small padlock icon. This is also used as tooltip
-- text for the large protection banners.
-- * image - the padlock image used in both protection banners and small padlock
-- icons.
--
-- The module checks in three separate tables to find a value for each field.
-- First it checks the banners table, which has values specific to the reason
-- for the page being protected. Then the module checks the defaultBanners
-- table, which has values specific to each protection level. Finally, the
-- module checks the masterBanner table, which holds data for protection
-- templates to use if no data has been found in the previous two tables.
--
-- The values in the banner data can take parameters. These are specified
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name
-- enclosed in curly braces).
--
-- Available parameters:
--
-- ${CURRENTVERSION} - a link to the page history or the move log, with the
-- display message "current-version-edit-display" or
-- "current-version-move-display".
--
-- ${EDITREQUEST} - a link to create an edit request for the current page.
--
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes
-- on the talk page; you may submit a request to ask an administrator to make
-- an edit if it is minor or supported by consensus."
--
-- ${IMAGELINK} - a link to set the image to, depending on the protection
-- action and protection level.
--
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry
-- is set. E.g. "Editing of this page by new or unregistered users is currently
-- disabled until dd Month YYYY."
--
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation
-- so that it can be used in run-on sentences.
--
-- ${PAGETYPE} - the type of the page, e.g. "article" or "template".
-- Defined in the cfg.pagetypes table.
--
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.
-- "Editing of this page by new or unregistered users is currently disabled"
--
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the
-- template.
--
-- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or
-- "semi-protected".
--
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,
-- depending on the protection action.
--
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links
-- straight to that talk page section.
--
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to
-- create a blurb like "This template is semi-protected", or "This article is
-- move-protected until DD Month YYYY".
--
-- ${VANDAL} - links for the specified username (or the root page name)
-- using Module:Vandal-m.
--
-- Functions
--
-- For advanced users, it is possible to use Lua functions instead of strings
-- in the banner config tables. Using functions gives flexibility that is not
-- possible just by using parameters. Functions take two arguments, the
-- protection object and the template arguments, and they must output a string.
--
-- For example:
--
-- text = function (protectionObj, args)
-- if protectionObj.level == 'autoconfirmed' then
-- return 'foo'
-- else
-- return 'bar'
-- end
-- end
--
-- Some protection object properties and methods that may be useful:
-- protectionObj.action - the protection action
-- protectionObj.level - the protection level
-- protectionObj.reason - the protection reason
-- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set
-- to indefinite, and the protection time in unix time if temporary.
-- protectionObj.protectionDate - the protection date in unix time, or nil if
-- unspecified.
-- protectionObj.bannerConfig - the banner config found by the module. Beware
-- of editing the config field used by the function, as it could create an
-- infinite loop.
-- protectionObj:isProtected - returns a boolean showing whether the page is
-- protected.
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is
-- temporary.
-- protectionObj:isIncorrect - returns a boolean showing whether the protection
-- template is incorrect.
--]]
-- The master banner data, used if no values have been found in banners or
-- defaultBanners.
masterBanner = {
text = '${INTROBLURB}',
explanation = '${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPBLURB}',
link = '${IMAGELINK}',
alt = 'Page ${PROTECTIONLEVEL}'
},
-- The default banner data. This holds banner data for different protection
-- levels.
-- *required* - this table needs edit, move, autoreview and upload subtables.
defaultBanners = {
edit = {},
move = {},
autoreview = {
default = {
alt = 'Page protected with pending changes',
tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',
image = 'Pending-protection-shackle.svg'
}
},
upload = {}
},
-- The banner data. This holds banner data for different protection reasons.
-- In fact, the reasons specified in this table control which reasons are
-- valid inputs to the first positional parameter.
--
-- There is also a non-standard "description" field that can be used for items
-- in this table. This is a description of the protection reason for use in the
-- module documentation.
--
-- *required* - this table needs edit, move, autoreview and upload subtables.
banners = {
edit = {
blp = {
description = 'For pages protected to promote compliance with the'
.. ' [[Wikipedia:Biographies of living persons'
.. '|biographies of living persons]] policy',
text = '${INTROFRAGMENT} to promote compliance with'
.. ' [[Wikipedia:Biographies of living persons'
.. "|Wikipedia's policy on the biographies"
.. ' of living people]].',
tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on'
.. ' biographies of living persons',
},
dmca = {
description = 'For pages protected by the Wikimedia Foundation'
.. ' due to [[Digital Millennium Copyright Act]] takedown requests',
explanation = function (protectionObj, args)
local ret = 'Pursuant to a rights owner notice under the Digital'
.. ' Millennium Copyright Act (DMCA) regarding some content'
.. ' in this article, the Wikimedia Foundation acted under'
.. ' applicable law and took down and restricted the content'
.. ' in question.'
if args.notice then
ret = ret .. ' A copy of the received notice can be found here: '
.. args.notice .. '.'
end
ret = ret .. ' For more information, including websites discussing'
.. ' how to file a counter-notice, please see'
.. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}."
.. "'''Do not remove this template from the article until the"
.. " restrictions are withdrawn'''."
return ret
end,
image = 'Office-protection-shackle.svg',
},
dispute = {
description = 'For pages protected due to editing disputes',
text = function (protectionObj, args)
-- Find the value of "disputes".
local display = 'disputes'
local disputes
if args.section then
disputes = string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[protectionObj.title.namespace].talk.name,
protectionObj.title.text,
args.section,
display
)
else
disputes = display
end
-- Make the blurb, depending on the expiry.
local msg
if type(protectionObj.expiry) == 'number' then
msg = '${INTROFRAGMENT} or until editing %s have been resolved.'
else
msg = '${INTROFRAGMENT} until editing %s have been resolved.'
end
return string.format(msg, disputes)
end,
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPFRAGMENT} due to editing disputes',
},
ecp = {
description = 'For articles in topic areas authorized by'
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] or'
.. ' meets the criteria for community use',
tooltip = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
alt = 'Extended-protected ${PAGETYPE}',
},
mainpage = {
description = 'For pages protected for being displayed on the [[Main Page]]',
text = 'This file is currently'
.. ' [[Wikipedia:This page is protected|protected]] from'
.. ' editing because it is currently or will soon be displayed'
.. ' on the [[Main Page]].',
explanation = 'Images on the Main Page are protected due to their high'
.. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.'
.. '<br /><span style="font-size:90%;">'
.. "'''Administrators:''' Once this image is definitely off the Main Page,"
.. ' please unprotect this file, or reduce to semi-protection,'
.. ' as appropriate.</span>',
},
office = {
description = 'For pages protected by the Wikimedia Foundation',
text = function (protectionObj, args)
local ret = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.'
if protectionObj.protectionDate then
ret = ret .. ' It has been protected since ${PROTECTIONDATE}.'
end
return ret
end,
explanation = "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not remove protection from this"
.. " page unless you are authorized by the Wikimedia Foundation to do"
.. " so.'''",
image = 'Office-protection-shackle.svg',
},
reset = {
description = 'For pages protected by the Wikimedia Foundation and'
.. ' "reset" to a bare-bones version',
text = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.protectionDate then
ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was'
else
ret = ret .. 'This ${PAGETYPE} has been'
end
ret = ret .. ' reduced to a'
.. ' simplified, "bare bones" version so that it may be completely'
.. ' rewritten to ensure it meets the policies of'
.. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].'
.. ' Standard Wikipedia policies will apply to its rewriting—which'
.. ' will eventually be open to all editors—and will be strictly'
.. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while'
.. ' it is being rebuilt.\n\n'
.. 'Any insertion of material directly from'
.. ' pre-protection revisions of the ${PAGETYPE} will be removed, as'
.. ' will any material added to the ${PAGETYPE} that is not properly'
.. ' sourced. The associated talk page(s) were also cleared on the'
.. " same date.\n\n"
.. "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not override"
.. " this action, and do not remove protection from this page,"
.. " unless you are authorized by the Wikimedia Foundation"
.. " to do so. No editor may remove this notice.'''"
return ret
end,
image = 'Office-protection-shackle.svg',
},
sock = {
description = 'For pages protected due to'
.. ' [[Wikipedia:Sock puppetry|sock puppetry]]',
text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of'
.. ' [[Wikipedia:Blocking policy|blocked]] or'
.. ' [[Wikipedia:Banning policy|banned users]]'
.. ' from editing it.',
tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from'
.. ' editing it',
},
template = {
description = 'For [[Wikipedia:High-risk templates|high-risk]]'
.. ' templates and Lua modules',
text = 'This is a permanently [[Help:Protection|protected]] ${PAGETYPE},'
.. ' as it is [[Wikipedia:High-risk templates|high-risk]].',
explanation = 'Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] or'
.. ' [[Wikipedia:Template editor|template editor]] to make an edit if'
.. ' it is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by'
.. ' [[Wikipedia:Consensus|consensus]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}'
.. ' to prevent vandalism',
alt = 'Permanently protected ${PAGETYPE}',
},
usertalk = {
description = 'For pages protected against disruptive edits by a'
.. ' particular user',
text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,'
.. ' such as abusing the'
.. ' {{[[Template:unblock|unblock]]}} template.',
explanation = 'If you cannot edit this user talk page and you need to'
.. ' make a change or leave a message, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for edits to a protected page'
.. '|request an edit]],'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]],'
.. ' [[Special:Userlogin|log in]],'
.. ' or [[Special:UserLogin/signup|create an account]].',
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism|vandalism]]',
text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.level == 'sysop' then
ret = ret .. "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. '
end
return ret .. '${EXPLANATIONBLURB}'
end,
tooltip = '${TOOLTIPFRAGMENT} due to vandalism',
}
},
move = {
dispute = {
description = 'For pages protected against page moves due to'
.. ' disputes over the page title',
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
image = 'Move-protection-shackle.svg'
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism#Page-move vandalism'
.. ' |page-move vandalism]]'
}
},
autoreview = {},
upload = {}
},
--------------------------------------------------------------------------------
--
-- GENERAL DATA TABLES
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Protection blurbs
--------------------------------------------------------------------------------
-- This table produces the protection blurbs available with the
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and
-- protection level, and is checked by the module in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionBlurbs = {
edit = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|'
.. 'protected]] from editing',
autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access'
.. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered'
.. ' users|unregistered]] users is currently [[Help:Protection|disabled]]',
extendedconfirmed = 'This ${PAGETYPE} is currently under extended confirmed protection',
},
move = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|protected]]'
.. ' from [[Help:Moving a page|page moves]]'
},
autoreview = {
default = 'All edits made to this ${PAGETYPE} by'
.. ' [[Wikipedia:User access levels#New users|new]] or'
.. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]'
.. ' users are currently'
.. ' [[Wikipedia:Pending changes|subject to review]]'
},
upload = {
default = 'Uploading new versions of this ${PAGETYPE} is currently disabled'
}
},
--------------------------------------------------------------------------------
-- Explanation blurbs
--------------------------------------------------------------------------------
-- This table produces the explanation blurbs available with the
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,
-- protection level, and whether the page is a talk page or not. If the page is
-- a talk page it will have a talk key of "talk"; otherwise it will have a talk
-- key of "subject". The table is checked in the following order:
-- 1. page's protection action, page's protection level, page's talk key
-- 2. page's protection action, page's protection level, default talk key
-- 3. page's protection action, default protection level, page's talk key
-- 4. page's protection action, default protection level, default talk key
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
explanationBlurbs = {
edit = {
autoconfirmed = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
},
extendedconfirmed = {
default = 'Extended confirmed protection prevents edits from all unregistered editors'
.. ' and registered users with fewer than 30 days tenure and 500 edits.'
.. ' The [[Wikipedia:Protection policy#extended|policy on community use]]'
.. ' specifies that extended confirmed protection can be applied to combat'
.. ' disruption, if semi-protection has proven to be ineffective.'
.. ' Extended confirmed protection may also be applied to enforce'
.. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].'
.. ' Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask for uncontroversial changes supported by'
.. ' [[Wikipedia:Consensus|consensus]].'
},
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]]. You may also [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|request]] that this page be unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' You may [[Wikipedia:Requests for page'
.. ' protection#Current requests for edits to a protected page|request an'
.. ' edit]] to this page, or [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|ask]] for it to be unprotected.'
}
},
move = {
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves on the'
.. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves at'
.. ' [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.'
}
},
autoreview = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Edits to this ${PAGETYPE} by new and unregistered users'
.. ' will not be visible to readers until they are accepted by'
.. ' a reviewer. To avoid the need for your edits to be'
.. ' reviewed, you may'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].'
},
},
upload = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but new versions of the file'
.. ' cannot be uploaded until it is unprotected. You can'
.. ' request that a new version be uploaded by using a'
.. ' [[Wikipedia:Edit requests|protected edit request]], or you'
.. ' can [[Wikipedia:Requests for page protection|request]]'
.. ' that the file be unprotected.'
}
}
},
--------------------------------------------------------------------------------
-- Protection levels
--------------------------------------------------------------------------------
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which
-- produces a short label for different protection levels. It is sorted by
-- protection action and protection level, and is checked in the following
-- order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionLevels = {
edit = {
default = 'protected',
templateeditor = 'template-protected',
extendedconfirmed = 'extended-protected',
autoconfirmed = 'semi-protected',
},
move = {
default = 'move-protected'
},
autoreview = {
},
upload = {
default = 'upload-protected'
}
},
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- This table lists different padlock images for each protection action and
-- protection level. It is used if an image is not specified in any of the
-- banner data tables, and if the page does not satisfy the conditions for using
-- the ['image-filename-indef'] image. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
images = {
edit = {
default = 'Full-protection-shackle.svg',
templateeditor = 'Template-protection-shackle.svg',
extendedconfirmed = 'Extended-protection-shackle.svg',
autoconfirmed = 'Semi-protection-shackle.svg'
},
move = {
default = 'Move-protection-shackle.svg',
},
autoreview = {
default = 'Pending-protection-shackle.svg'
},
upload = {
default = 'Upload-protection-shackle.svg'
}
},
-- Pages with a reason specified in this table will show the special "indef"
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.
indefImageReasons = {
template = true
},
--------------------------------------------------------------------------------
-- Image links
--------------------------------------------------------------------------------
-- This table provides the data for the ${IMAGELINK} parameter, which gets
-- the image link for small padlock icons based on the page's protection action
-- and protection level. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
imageLinks = {
edit = {
default = 'Wikipedia:Protection policy#full',
templateeditor = 'Wikipedia:Protection policy#template',
extendedconfirmed = 'Wikipedia:Protection policy#extended',
autoconfirmed = 'Wikipedia:Protection policy#semi'
},
move = {
default = 'Wikipedia:Protection policy#move'
},
autoreview = {
default = 'Wikipedia:Protection policy#pending'
},
upload = {
default = 'Wikipedia:Protection policy#upload'
}
},
--------------------------------------------------------------------------------
-- Padlock indicator names
--------------------------------------------------------------------------------
-- This table provides the "name" attribute for the <indicator> extension tag
-- with which small padlock icons are generated. All indicator tags on a page
-- are displayed in alphabetical order based on this attribute, and with
-- indicator tags with duplicate names, the last tag on the page wins.
-- The attribute is chosen based on the protection action; table keys must be a
-- protection action name or the string "default".
padlockIndicatorNames = {
autoreview = 'pp-autoreview',
default = 'pp-default'
},
--------------------------------------------------------------------------------
-- Protection categories
--------------------------------------------------------------------------------
--[[
-- The protection categories are stored in the protectionCategories table.
-- Keys to this table are made up of the following strings:
--
-- 1. the expiry date
-- 2. the namespace
-- 3. the protection reason (e.g. "dispute" or "vandalism")
-- 4. the protection level (e.g. "sysop" or "autoconfirmed")
-- 5. the action (e.g. "edit" or "move")
--
-- When the module looks up a category in the table, first it will will check to
-- see a key exists that corresponds to all five parameters. For example, a
-- user page semi-protected from vandalism for two weeks would have the key
-- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module
-- changes the first part of the key to "all" and checks the table again. It
-- keeps checking increasingly generic key combinations until it finds the
-- field, or until it reaches the key "all-all-all-all-all".
--
-- The module uses a binary matrix to determine the order in which to search.
-- This is best demonstrated by a table. In this table, the "0" values
-- represent "all", and the "1" values represent the original data (e.g.
-- "indef" or "file" or "vandalism").
--
-- expiry namespace reason level action
-- order
-- 1 1 1 1 1 1
-- 2 0 1 1 1 1
-- 3 1 0 1 1 1
-- 4 0 0 1 1 1
-- 5 1 1 0 1 1
-- 6 0 1 0 1 1
-- 7 1 0 0 1 1
-- 8 0 0 0 1 1
-- 9 1 1 1 0 1
-- 10 0 1 1 0 1
-- 11 1 0 1 0 1
-- 12 0 0 1 0 1
-- 13 1 1 0 0 1
-- 14 0 1 0 0 1
-- 15 1 0 0 0 1
-- 16 0 0 0 0 1
-- 17 1 1 1 1 0
-- 18 0 1 1 1 0
-- 19 1 0 1 1 0
-- 20 0 0 1 1 0
-- 21 1 1 0 1 0
-- 22 0 1 0 1 0
-- 23 1 0 0 1 0
-- 24 0 0 0 1 0
-- 25 1 1 1 0 0
-- 26 0 1 1 0 0
-- 27 1 0 1 0 0
-- 28 0 0 1 0 0
-- 29 1 1 0 0 0
-- 30 0 1 0 0 0
-- 31 1 0 0 0 0
-- 32 0 0 0 0 0
--
-- In this scheme the action has the highest priority, as it is the last
-- to change, and the expiry has the least priority, as it changes the most.
-- The priorities of the expiry, the protection level and the action are
-- fixed, but the priorities of the reason and the namespace can be swapped
-- through the use of the cfg.bannerDataNamespaceHasPriority table.
--]]
-- If the reason specified to the template is listed in this table,
-- namespace data will take priority over reason data in the protectionCategories
-- table.
reasonsWithNamespacePriority = {
vandalism = true,
},
-- The string to use as a namespace key for the protectionCategories table for each
-- namespace number.
categoryNamespaceKeys = {
[ 2] = 'user',
[ 3] = 'user',
[ 4] = 'project',
[ 6] = 'file',
[ 8] = 'mediawiki',
[ 10] = 'template',
[ 12] = 'project',
[ 14] = 'category',
[100] = 'portal',
[828] = 'module',
},
protectionCategories = {
['all|all|all|all|all'] = 'Wikipedia fully protected pages',
['all|all|office|all|all'] = 'Wikipedia Office-protected pages',
['all|all|reset|all|all'] = 'Wikipedia Office-protected pages',
['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages',
['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files',
['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|template|all|all|edit'] = 'Wikipedia fully protected templates',
['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages',
['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages',
['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people',
['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute',
['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users',
['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism',
['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories',
['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files',
['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals',
['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages',
['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages',
['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates',
['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages',
['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules',
['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates',
['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates
['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people',
['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people',
['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute',
['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users',
['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism',
['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories',
['all|file|all|sysop|edit'] = 'Wikipedia fully protected files',
['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages',
['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages',
['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates',
['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages',
['all|module|all|all|edit'] = 'Wikipedia fully protected modules',
['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules',
['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules',
['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules',
['all|all|all|sysop|move'] = 'Wikipedia move-protected pages',
['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages',
['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute',
['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism',
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',
['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages',
['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages',
['all|template|all|sysop|move'] = 'Wikipedia move-protected templates',
['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages',
['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',
['all|file|all|all|upload'] = 'Wikipedia upload-protected files',
},
--------------------------------------------------------------------------------
-- Expiry category config
--------------------------------------------------------------------------------
-- This table configures the expiry category behaviour for each protection
-- action.
-- * If set to true, setting that action will always categorise the page if
-- an expiry parameter is not set.
-- * If set to false, setting that action will never categorise the page.
-- * If set to nil, the module will categorise the page if:
-- 1) an expiry parameter is not set, and
-- 2) a reason is provided, and
-- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck
-- table.
expiryCheckActions = {
edit = nil,
move = false,
autoreview = true,
upload = false
},
reasonsWithoutExpiryCheck = {
blp = true,
template = true,
},
--------------------------------------------------------------------------------
-- Pagetypes
--------------------------------------------------------------------------------
-- This table produces the page types available with the ${PAGETYPE} parameter.
-- Keys are namespace numbers, or the string "default" for the default value.
pagetypes = {
[0] = 'article',
[6] = 'file',
[10] = 'template',
[14] = 'category',
[828] = 'module',
default = 'page'
},
--------------------------------------------------------------------------------
-- Strings marking indefinite protection
--------------------------------------------------------------------------------
-- This table contains values passed to the expiry parameter that mean the page
-- is protected indefinitely.
indefStrings = {
['indef'] = true,
['indefinite'] = true,
['indefinitely'] = true,
['infinite'] = true,
},
--------------------------------------------------------------------------------
-- Group hierarchy
--------------------------------------------------------------------------------
-- This table maps each group to all groups that have a superset of the original
-- group's page editing permissions.
hierarchy = {
sysop = {},
reviewer = {'sysop'},
filemover = {'sysop'},
templateeditor = {'sysop'},
extendedconfirmed = {'sysop'},
autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},
user = {'autoconfirmed'},
['*'] = {'user'}
},
--------------------------------------------------------------------------------
-- Wrapper templates and their default arguments
--------------------------------------------------------------------------------
-- This table contains wrapper templates used with the module, and their
-- default arguments. Templates specified in this table should contain the
-- following invocation, and no other template content:
--
-- {{#invoke:Protection banner|main}}
--
-- If other content is desired, it can be added between
-- <noinclude>...</noinclude> tags.
--
-- When a user calls one of these wrapper templates, they will use the
-- default arguments automatically. However, users can override any of the
-- arguments.
wrappers = {
['Template:Pp'] = {},
['Template:Pp-extended'] = {'ecp'},
['Template:Pp-blp'] = {'blp'},
-- we don't need Template:Pp-create
['Template:Pp-dispute'] = {'dispute'},
['Template:Pp-main-page'] = {'mainpage'},
['Template:Pp-move'] = {action = 'move', catonly = 'yes'},
['Template:Pp-move-dispute'] = {'dispute', action = 'move', catonly = 'yes'},
-- we don't need Template:Pp-move-indef
['Template:Pp-move-vandalism'] = {'vandalism', action = 'move', catonly = 'yes'},
['Template:Pp-office'] = {'office'},
['Template:Pp-office-dmca'] = {'dmca'},
['Template:Pp-pc'] = {action = 'autoreview', small = true},
['Template:Pp-pc1'] = {action = 'autoreview', small = true},
['Template:Pp-reset'] = {'reset'},
['Template:Pp-semi-indef'] = {small = true},
['Template:Pp-sock'] = {'sock'},
['Template:Pp-template'] = {'template', small = true},
['Template:Pp-upload'] = {action = 'upload'},
['Template:Pp-usertalk'] = {'usertalk'},
['Template:Pp-vandalism'] = {'vandalism'},
},
--------------------------------------------------------------------------------
--
-- MESSAGES
--
--------------------------------------------------------------------------------
msg = {
--------------------------------------------------------------------------------
-- Intro blurb and intro fragment
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${INTROBLURB} and
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use
-- intro-blurb-noexpiry or intro-fragment-noexpiry.
-- It is possible to use banner parameters in these messages.
['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.',
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.',
['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},',
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',
--------------------------------------------------------------------------------
-- Tooltip blurb
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.
-- If the protection is temporary the tooltip-blurb-expiry message is used, and
-- if not the tooltip-blurb-noexpiry message is used.
-- It is possible to use banner parameters in these messages.
['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.',
['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.',
['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},',
['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
--------------------------------------------------------------------------------
-- Special explanation blurb
--------------------------------------------------------------------------------
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages
-- in the MediaWiki namespace.
-- It is possible to use banner parameters in this message.
['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]].',
--------------------------------------------------------------------------------
-- Protection log display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the protection log link
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.
-- It is possible to use banner parameters in these messages.
['protection-log-display'] = 'protection log',
['pc-log-display'] = 'pending changes log',
--------------------------------------------------------------------------------
-- Current version display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the page history link
-- or the move log link produced by the ${CURRENTVERSION} parameter.
-- It is possible to use banner parameters in these messages.
['current-version-move-display'] = 'current title',
['current-version-edit-display'] = 'current version',
--------------------------------------------------------------------------------
-- Talk page
--------------------------------------------------------------------------------
-- This message determines the display value of the talk page link produced
-- with the ${TALKPAGE} parameter.
-- It is possible to use banner parameters in this message.
['talk-page-link-display'] = 'talk page',
--------------------------------------------------------------------------------
-- Edit requests
--------------------------------------------------------------------------------
-- This message determines the display value of the edit request link produced
-- with the ${EDITREQUEST} parameter.
-- It is possible to use banner parameters in this message.
['edit-request-display'] = 'submit an edit request',
--------------------------------------------------------------------------------
-- Expiry date format
--------------------------------------------------------------------------------
-- This is the format for the blurb expiry date. It should be valid input for
-- the first parameter of the #time parser function.
['expiry-date-format'] = 'F j, Y "at" H:i e',
--------------------------------------------------------------------------------
-- Tracking categories
--------------------------------------------------------------------------------
-- These messages determine which tracking categories the module outputs.
['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates',
['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules',
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- These are images that are not defined by their protection action and protection level.
['image-filename-indef'] = 'Full-protection-shackle.svg',
['image-filename-default'] = 'Transparent.gif',
--------------------------------------------------------------------------------
-- End messages
--------------------------------------------------------------------------------
}
--------------------------------------------------------------------------------
-- End configuration
--------------------------------------------------------------------------------
}
a20552ae38cb5253a4fa29aa126abc74215a589f
Module:Sidebar
828
99
215
214
2023-06-06T08:51:33Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Sidebar]]: w
Scribunto
text/plain
require('strict')
local cfg = mw.loadData('Module:Sidebar/configuration')
local p = {}
local getArgs = require('Module:Arguments').getArgs
--[[
Categorizes calling templates and modules with a 'style' parameter of any sort
for tracking to convert to TemplateStyles.
TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module.
TODO would probably want to remove /log and /archive as CS1 does
]]
local function categorizeTemplatesWithInlineStyles(args)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 and title.namespace ~= 828 then return '' end
for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do
if title.text:match(pattern) then return '' end
end
for key, _ in pairs(args) do
if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == 'width' then
return cfg.i18n.category.conversion
end
end
end
--[[
For compatibility with the original {{sidebar with collapsible lists}}
implementation, which passed some parameters through {{#if}} to trim their
whitespace. This also triggered the automatic newline behavior.
]]
-- See ([[meta:Help:Newlines and spaces#Automatic newline]])
local function trimAndAddAutomaticNewline(s)
s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")
if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then
return '\n' .. s
else
return s
end
end
--[[
Finds whether a sidebar has a subgroup sidebar.
]]
local function hasSubgroup(s)
if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then
return true
else
return false
end
end
local function has_navbar(navbar_mode, sidebar_name)
return navbar_mode ~= cfg.i18n.navbar_none and
navbar_mode ~= cfg.i18n.navbar_off and
(
sidebar_name or
mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
cfg.i18n.title_not_to_add_navbar
)
end
local function has_list_class(args, htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, value in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, 'class') then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles(args)
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(args, htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.plainlist_templatestyles)
local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.hlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar(args.navbar, args.name) and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.hlist_templatestyles}
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note]
return hlist_styles .. plainlist_styles
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
--[[
Main sidebar function. Takes the frame, args, and an optional collapsibleClass.
The collapsibleClass is and should be used only for sidebars with collapsible
lists, as in p.collapsible.
]]
function p.sidebar(frame, args, collapsibleClass)
if not args then
args = getArgs(frame)
end
local hiding_templatestyles = table.concat(move_hiding_templatestyles(args))
local root = mw.html.create()
local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes
root = root:tag('table')
if not child then
root
:addClass(cfg.i18n.class.sidebar)
-- force collapsibleclass to be sidebar-collapse otherwise output nothing
:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)
:addClass('nomobile')
:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)
:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)
:addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)
:addClass(args.bodyclass or args.class)
:css('width', args.width or nil)
:cssText(args.bodystyle or args.style)
if args.outertitle then
root
:tag('caption')
:addClass(cfg.i18n.class.outer_title)
:addClass(args.outertitleclass)
:cssText(args.outertitlestyle)
:wikitext(args.outertitle)
end
if args.topimage then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.top_image)
:addClass(args.topimageclass)
:cssText(args.topimagestyle)
:wikitext(args.topimage)
if args.topcaption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.top_caption)
:cssText(args.topcaptionstyle)
:wikitext(args.topcaption)
end
end
if args.pretitle then
root
:tag('tr')
:tag('td')
:addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image
or cfg.i18n.class.pretitle)
:addClass(args.pretitleclass)
:cssText(args.basestyle)
:cssText(args.pretitlestyle)
:wikitext(args.pretitle)
end
else
root
:addClass(cfg.i18n.class.subgroup)
:addClass(args.bodyclass or args.class)
:cssText(args.bodystyle or args.style)
end
if args.title then
if child then
root
:wikitext(args.title)
else
root
:tag('tr')
:tag('th')
:addClass(args.pretitle and cfg.i18n.class.title_with_pretitle
or cfg.i18n.class.title)
:addClass(args.titleclass)
:cssText(args.basestyle)
:cssText(args.titlestyle)
:wikitext(args.title)
end
end
if args.image then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.image)
:addClass(args.imageclass)
:cssText(args.imagestyle)
:wikitext(args.image)
if args.caption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.caption)
:cssText(args.captionstyle)
:wikitext(args.caption)
end
end
if args.above then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.above)
:addClass(args.aboveclass)
:cssText(args.abovestyle)
:newline() -- newline required for bullet-points to work
:wikitext(args.above)
end
local rowNums = {}
for k, v in pairs(args) do
k = '' .. k
local num = k:match('^heading(%d+)$') or k:match('^content(%d+)$')
if num then table.insert(rowNums, tonumber(num)) end
end
table.sort(rowNums)
-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3
-- and content3 are specified)
for i = #rowNums, 1, -1 do
if rowNums[i] == rowNums[i - 1] then
table.remove(rowNums, i)
end
end
for i, num in ipairs(rowNums) do
local heading = args['heading' .. num]
if heading then
root
:tag('tr')
:tag('th')
:addClass(cfg.i18n.class.heading)
:addClass(args.headingclass)
:addClass(args['heading' .. num .. 'class'])
:cssText(args.basestyle)
:cssText(args.headingstyle)
:cssText(args['heading' .. num .. 'style'])
:newline()
:wikitext(heading)
end
local content = args['content' .. num]
if content then
root
:tag('tr')
:tag('td')
:addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup
or cfg.i18n.class.content)
:addClass(args.contentclass)
:addClass(args['content' .. num .. 'class'])
:cssText(args.contentstyle)
:cssText(args['content' .. num .. 'style'])
:newline()
:wikitext(content)
:done()
-- Without a linebreak after the </td>, a nested list like
-- "* {{hlist| ...}}" doesn't parse correctly.
:newline()
end
end
if args.below then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.below)
:addClass(args.belowclass)
:cssText(args.belowstyle)
:newline()
:wikitext(args.below)
end
if not child and has_navbar(args.navbar, args.name) then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.navbar)
:cssText(args.navbarstyle)
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
fontstyle = args.navbarfontstyle
})
end
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.templatestyles }
}
local templatestyles = ''
if args['templatestyles'] and args['templatestyles'] ~= '' then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] and args['child templatestyles'] ~= '' then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] and args['grandchild templatestyles'] ~= '' then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
add_list_styles(args), -- see [hlist_note] above about ordering
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles,
hiding_templatestyles,
tostring(root),
(child and cfg.i18n.category.child or ''),
categorizeTemplatesWithInlineStyles(args)
})
end
local function list_title(args, is_centered_list_titles, num)
local title_text = trimAndAddAutomaticNewline(args['list' .. num .. 'title']
or cfg.i18n.default_list_title)
local title
if is_centered_list_titles then
-- collapsible can be finicky, so provide some CSS/HTML to support
title = mw.html.create('div')
:addClass(cfg.i18n.class.list_title_centered)
:wikitext(title_text)
else
title = mw.html.create()
:wikitext(title_text)
end
local title_container = mw.html.create('div')
:addClass(cfg.i18n.class.list_title)
-- don't /need/ a listnumtitleclass because you can do
-- .templateclass .listnumclass .sidebar-list-title
:addClass(args.listtitleclass)
:cssText(args.basestyle)
:cssText(args.listtitlestyle)
:cssText(args['list' .. num .. 'titlestyle'])
:node(title)
:done()
return title_container
end
--[[
Main entry point for sidebar with collapsible lists.
Does the work of creating the collapsible lists themselves and including them
into the args.
]]
function p.collapsible(frame)
local args = getArgs(frame)
if not args.name and
frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, '') ==
cfg.i18n.collapse_title_not_to_add_navbar then
args.navbar = cfg.i18n.navbar_none
end
local contentArgs = {}
local is_centered_list_titles = false
if args['centered list titles'] and args['centered list titles'] ~= '' then
is_centered_list_titles = true
end
for k, v in pairs(args) do
local num = string.match(k, '^list(%d+)$')
if num then
local expand = args.expanded and
(args.expanded == 'all' or args.expanded == args['list' .. num .. 'name'])
local row = mw.html.create('div')
row
:addClass(cfg.i18n.class.list)
:addClass('mw-collapsible')
:addClass((not expand) and 'mw-collapsed' or nil)
:addClass(args['list' .. num .. 'class'])
:cssText(args.listframestyle)
:cssText(args['list' .. num .. 'framestyle'])
:node(list_title(args, is_centered_list_titles, num))
:tag('div')
:addClass(cfg.i18n.class.list_content)
:addClass('mw-collapsible-content')
-- don't /need/ a listnumstyleclass because you can do
-- .templatename .listnumclass .sidebar-list
:addClass(args.listclass)
:cssText(args.liststyle)
:cssText(args['list' .. num .. 'style'])
:wikitext(trimAndAddAutomaticNewline(args['list' .. num]))
contentArgs['content' .. num] = tostring(row)
end
end
for k, v in pairs(contentArgs) do
args[k] = v
end
return p.sidebar(frame, args, cfg.i18n.class.collapse)
end
return p
71fe765846593e025ca2f94371315e9dbb5bb4d2
Module:Sidebar/configuration
828
100
217
216
2023-06-06T08:51:34Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Sidebar/configuration]]: w
Scribunto
text/plain
return {
i18n = {
child_yes = 'yes',
float_none = 'none',
float_left = 'left',
wrap_true = 'true',
navbar_none = 'none',
navbar_off = 'off',
default_list_title = 'List',
title_not_to_add_navbar = 'Template:Sidebar',
collapse_title_not_to_add_navbar = 'Template:Sidebar with collapsible lists',
templatestyles = 'Module:Sidebar/styles.css',
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
category = {
child = '[[Category:Pages using sidebar with the child parameter]]',
conversion = '[[Category:Sidebars with styles needing conversion]]'
},
pattern = {
collapse_sandbox = '/sandbox$',
sandbox = '/sandbox$',
subgroup = 'sidebar%-subgroup',
style_conversion = 'style$',
uncategorized_conversion_titles = {
'/[Ss]andbox',
'/[Tt]estcases',
'/[Dd]oc$'
}
},
class = {
sidebar = 'sidebar',
subgroup = 'sidebar-subgroup',
collapse = 'sidebar-collapse',
float_none = 'sidebar-none',
float_left = 'sidebar-left',
wraplinks = 'nowraplinks',
outer_title = 'sidebar-outer-title',
top_image = 'sidebar-top-image',
top_caption = 'sidebar-top-caption',
pretitle = 'sidebar-pretitle',
pretitle_with_top_image = 'sidebar-pretitle-with-top-image',
title = 'sidebar-title',
title_with_pretitle = 'sidebar-title-with-pretitle',
image = 'sidebar-image',
caption = 'sidebar-caption',
above = 'sidebar-above',
heading = 'sidebar-heading',
content = 'sidebar-content',
content_with_subgroup = 'sidebar-content-with-subgroup',
below = 'sidebar-below',
navbar = 'sidebar-navbar',
list = 'sidebar-list',
list_title = 'sidebar-list-title',
list_title_centered = 'sidebar-list-title-c',
list_content = 'sidebar-list-content'
}
}
}
dc2a980ac2162a898f7c21e6d6ba7e994dfeb315
Module:Sidebar/styles.css
828
101
219
218
2023-06-06T08:51:34Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Sidebar/styles.css]]: w
sanitized-css
text/css
/* {{pp-template}} */
/* TODO: Invert width design to be "mobile first" */
.sidebar {
/* TODO: Ask if we should have max-width 22em instead */
width: 22em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
/* @noflip */
margin: 0.5em 0 1em 1em;
background: #f8f9fa;
border: 1px solid #aaa;
padding: 0.2em;
text-align: center;
line-height: 1.4em;
font-size: 88%;
border-collapse: collapse;
/* Timeless has display: none on .nomobile at mobile resolutions, so we
* unhide it with display: table and let precedence and proximity win.
*/
display: table;
}
/* Unfortunately, so does Minerva desktop, except Minerva drops an
* !important on the declaration. So we have to be mean for Minerva users.
* Mobile removes the element entirely with `wgMFRemovableClasses` in
* https://github.com/wikimedia/operations-mediawiki-config/blob/master/
wmf-config/InitialiseSettings.php#L16992
* which is why displaying it categorically with display: table works.
* We don't really want to expose the generic user in the wild on mobile to have
* to deal with sidebars. (Maybe the ones with collapsible lists, so that
* might be an improvement. That is blocked on [[:phab:T111565]].)
*/
body.skin-minerva .sidebar {
display: table !important;
/* also, minerva is way too aggressive about other stylings on tables.
* TODO remove when this template gets moved to a div. plans on talk page.
* We always float right on Minerva because that's a lot of extra CSS
* otherwise. */
float: right !important;
margin: 0.5em 0 1em 1em !important;
}
.sidebar-subgroup {
width: 100%;
margin: 0;
border-spacing: 0;
}
.sidebar-left {
/* @noflip */
float: left;
/* @noflip */
clear: left;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-none {
float: none;
clear: both;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-outer-title {
padding: 0 0.4em 0.2em;
font-size: 125%;
line-height: 1.2em;
font-weight: bold;
}
.sidebar-top-image {
padding: 0.4em;
}
.sidebar-top-caption,
.sidebar-pretitle-with-top-image,
.sidebar-caption {
padding: 0.2em 0.4em 0;
line-height: 1.2em;
}
.sidebar-pretitle {
padding: 0.4em 0.4em 0;
line-height: 1.2em;
}
.sidebar-title,
.sidebar-title-with-pretitle {
padding: 0.2em 0.8em;
font-size: 145%;
line-height: 1.2em;
}
.sidebar-title-with-pretitle {
padding: 0.1em 0.4em;
}
.sidebar-image {
padding: 0.2em 0.4em 0.4em;
}
.sidebar-heading {
padding: 0.1em 0.4em;
}
.sidebar-content {
padding: 0 0.5em 0.4em;
}
.sidebar-content-with-subgroup {
padding: 0.1em 0.4em 0.2em;
}
.sidebar-above,
.sidebar-below {
padding: 0.3em 0.8em;
font-weight: bold;
}
.sidebar-collapse .sidebar-above,
.sidebar-collapse .sidebar-below {
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
.sidebar-navbar {
text-align: right;
font-size: 115%;
padding: 0 0.4em 0.4em;
}
.sidebar-list-title {
padding: 0 0.4em;
text-align: left;
font-weight: bold;
line-height: 1.6em;
font-size: 105%;
}
/* centered text with mw-collapsible headers is finicky */
.sidebar-list-title-c {
padding: 0 0.4em;
text-align: center;
margin: 0 3.3em;
}
@media (max-width: 720px) {
/* users have wide latitude to set arbitrary width and margin :(
"Super-specific" selector to prevent overriding this appearance by
lower level sidebars too */
body.mediawiki .sidebar {
width: 100% !important;
clear: both;
float: none !important; /* Remove when we div based; Minerva is dumb */
margin-left: 0 !important;
margin-right: 0 !important;
}
/* TODO: We might consider making all links wrap at small resolutions and then
* only introduce nowrap at higher resolutions. Do when we invert the media
* query.
*/
}
7d621b35a37807a103b59075851fe36201204ceb
Template:As of
10
102
221
220
2023-06-06T08:51:35Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:As_of]]: w
wikitext
text/x-wiki
<!--{{As of}} begin--><includeonly><!--
## param 1 is the year
## optional param 2 is the month
## optional param 3 is the day of the month
## optional named parameter alt=[text] is alternative display text (may include wiki markup)
## optional named parameter df=US produces American date format in displayed text
## optional named parameter lc=on gives lower-case-first output
## optional named parameter url=[URL] gives statement reference
## displayed text ([A/a]s of [Start date] by default)
-->{{#if: {{{alt|}}} | {{{alt}}} | {{#if:{{{bare|}}}||{{#if:{{yesno|{{{since|}}}}}|{{#if: {{yesno|{{{lc|}}}}} | s | S }}ince | {{#if: {{yesno|{{{lc|}}}}} | a | A }}s of}}}} {{#if:{{{pre|}}}|{{{pre}}} }}{{#if: {{{3|}}} | {{#ifeq:{{lc:{{{df|}}}}}|us|{{MONTHNAME|{{{2}}}}} {{#expr:{{{3}}}}}, |{{#expr:{{{3}}}}} {{MONTHNAME|{{{2}}}}} }}{{{1}}}|{{#if: {{{2|}}} |{{MONTHNAME|{{{2}}}}} }}{{{1}}}}}}}{{#if:{{{post|}}}|<nowiki />{{{post}}}}}<!--
#### That nowiki is required or, various characters (:, ;, #, and *} will be parsed as wikisyntax for list items.
## ref/update inline banner (hidden by default)
--><sup class="plainlinks noexcerpt noprint asof-tag {{#if:{{{url|}}}|ref|update}}" style="display:none;">[{{#if:{{{url|}}}|{{{url}}} [ref]|{{fullurl:{{PAGENAME}}|action=edit}} [update]}}]</sup><!--
## categorisation disabled outside main namespace
-->{{DMCA|Articles containing potentially dated statements|from|<!--
## temporal category for template (word method)
-->{{#if: {{#ifexpr: {{{1}}} = 1 }} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 2004 | {{{1}}} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 1989 | {{#time:Y|{{{1}}}}} | before 1990 }}}} | <!--
## temporal category for template (parameter method)
-->{{#ifexpr: {{{1}}} > 2004 | {{#if:{{{2|}}} | {{MONTHNAME|{{{2}}}}} }} {{{1}}} | {{#ifexpr:{{{1}}} > 1989 | {{{1}}} | before 1990 }}}}}}|<!--
## global category for template
-->All articles containing potentially dated statements}}</includeonly><!--{{As of}} end--><noinclude><!--
## dynamic example (as of today, self ref)
-->{{As of|{{CURRENTYEAR}}|{{CURRENTMONTH}}|{{CURRENTDAY}}}}<sup class="plainlinks">[https://en.wikipedia.org/wiki/Template:As_of [ref]]</sup>
{{documentation}}
<!-- Add categories and inter-wikis to the /doc subpage, not here! -->
</noinclude>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using as of template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:As of]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | alt | bare | df | lc | post | pre | since | url }}
dd0794e75a86855d0ccc649adeaa8be5d3c3c704
Template:Yesno-no
10
103
223
222
2023-06-06T08:51:35Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Yesno-no]]: w
wikitext
text/x-wiki
{{safesubst:<noinclude />yesno|{{{1}}}|yes={{{yes|yes}}}|no={{{no|no}}}|blank={{{blank|no}}}|¬={{{¬|no}}}|def={{{def|no}}}}}<noinclude>
{{Documentation|Template:Yesno/doc}}
<!--Categories go in the doc page referenced above; interwikis go in Wikidata.-->
</noinclude>
1ad7b7800da1b867ead8f6ff8cef76e6201b3b56
Template:For
10
104
225
224
2023-06-06T08:51:36Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:For]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:For|For}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
3f70c0fa7cd736071e7c6e7dcd90ff3704df26bb
Module:Color contrast
828
105
227
226
2023-06-06T08:51:36Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Color_contrast]]: w
Scribunto
text/plain
--
-- This module implements
-- {{Color contrast ratio}}
-- {{Greater color contrast ratio}}
-- {{ColorToLum}}
-- {{RGBColorToLum}}
--
local p = {}
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
local function sRGB (v)
if (v <= 0.03928) then
v = v / 12.92
else
v = math.pow((v+0.055)/1.055, 2.4)
end
return v
end
local function rgbdec2lum(R, G, B)
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
else
return ''
end
end
local function hsl2lum(h, s, l)
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
local c = (1 - math.abs(2*l - 1))*s
local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )
local m = l - c/2
local r, g, b = m, m, m
if( 0 <= h and h < 60 ) then
r = r + c
g = g + x
elseif( 60 <= h and h < 120 ) then
r = r + x
g = g + c
elseif( 120 <= h and h < 180 ) then
g = g + c
b = b + x
elseif( 180 <= h and h < 240 ) then
g = g + x
b = b + c
elseif( 240 <= h and h < 300 ) then
r = r + x
b = b + c
elseif( 300 <= h and h < 360 ) then
r = r + c
b = b + x
end
return rgbdec2lum(255*r, 255*g, 255*b)
else
return ''
end
end
local function color2lum(c)
if (c == nil) then
return ''
end
-- html '#' entity
c = c:gsub("#", "#")
-- whitespace
c = c:match( '^%s*(.-)[%s;]*$' )
-- unstrip nowiki strip markers
c = mw.text.unstripNoWiki(c)
-- lowercase
c = c:lower()
-- first try to look it up
local L = HTMLcolor[c]
if (L ~= nil) then
return L
end
-- convert from hsl
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
end
-- convert from rgb
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
end
-- convert from rgb percent
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
end
-- remove leading # (if there is one) and whitespace
c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$')
-- split into rgb
local cs = mw.text.split(c or '', '')
if( #cs == 6 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2])
local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4])
local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6])
return rgbdec2lum(R, G, B)
elseif ( #cs == 3 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1])
local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2])
local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3])
return rgbdec2lum(R, G, B)
end
-- failure, return blank
return ''
end
-- This exports the function for use in other modules.
-- The colour is passed as a string.
function p._lum(color)
return color2lum(color)
end
function p._greatercontrast(args)
local bias = tonumber(args['bias'] or '0') or 0
local css = (args['css'] and args['css'] ~= '') and true or false
local v1 = color2lum(args[1] or '')
local c2 = args[2] or '#FFFFFF'
local v2 = color2lum(c2)
local c3 = args[3] or '#000000'
local v3 = color2lum(c3)
local ratio1 = -1;
local ratio2 = -1;
if (type(v1) == 'number' and type(v2) == 'number') then
ratio1 = (v2 + 0.05)/(v1 + 0.05)
ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1
end
if (type(v1) == 'number' and type(v3) == 'number') then
ratio2 = (v3 + 0.05)/(v1 + 0.05)
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
end
if css then
local c1 = args[1] or ''
if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c1 = '#' .. c1
end
if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c2 = '#' .. c2
end
if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c3 = '#' .. c3
end
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'
end
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''
end
function p._ratio(args)
local v1 = color2lum(args[1])
local v2 = color2lum(args[2])
if (type(v1) == 'number' and type(v2) == 'number') then
-- v1 should be the brighter of the two.
if v2 > v1 then
v1, v2 = v2, v1
end
return (v1 + 0.05)/(v2 + 0.05)
else
return args['error'] or '?'
end
end
function p._styleratio(args)
local style = (args[1] or ''):lower()
local bg, fg = 'white', 'black'
local lum_bg, lum_fg = 1, 0
if args[2] then
local lum = color2lum(args[2])
if lum ~= '' then bg, lum_bg = args[2], lum end
end
if args[3] then
local lum = color2lum(args[3])
if lum ~= '' then fg, lum_fg = args[3], lum end
end
local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '#', '#'), ';')
for k = 1,#slist do
local s = slist[k]
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' )
k = k or ''
v = v or ''
if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_bg = v, lum end
elseif (k:match('^[%s]*(color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_fg = v, lum end
end
end
if lum_bg > lum_fg then
return (lum_bg + 0.05)/(lum_fg + 0.05)
else
return (lum_fg + 0.05)/(lum_bg + 0.05)
end
end
--[[
Use {{#invoke:Color contrast|somecolor}} directly or
{{#invoke:Color contrast}} from a wrapper template.
Parameters:
-- |1= — required; A color to check.
--]]
function p.lum(frame)
local color = frame.args[1] or frame:getParent().args[1]
return p._lum(color)
end
function p.ratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._ratio(args)
end
function p.styleratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._styleratio(args)
end
function p.greatercontrast(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._greatercontrast(args)
end
return p
1e399769117591366a63f62996c9a407077cc711
Module:Color contrast/colors
828
106
229
228
2023-06-06T08:51:37Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Color_contrast/colors]]: w
Scribunto
text/plain
return {
aliceblue = 0.92880068253475,
antiquewhite = 0.84646951707754,
aqua = 0.7874,
aquamarine = 0.8078549208338,
azure = 0.97265264954166,
beige = 0.8988459998705,
bisque = 0.80732327372979,
black = 0,
blanchedalmond = 0.85084439608156,
blue = 0.0722,
blueviolet = 0.12622014321946,
brown = 0.098224287876511,
burlywood = 0.51559844533893,
cadetblue = 0.29424681085422,
chartreuse = 0.76032025902623,
chocolate = 0.23898526114557,
coral = 0.37017930872924,
cornflowerblue = 0.30318641994179,
cornsilk = 0.93562110372965,
crimson = 0.16042199953026,
cyan = 0.7874,
darkblue = 0.018640801980939,
darkcyan = 0.20329317839046,
darkgoldenrod = 0.27264703559993,
darkgray = 0.39675523072563,
darkgreen = 0.091143429047575,
darkgrey = 0.39675523072563,
darkkhaki = 0.45747326349994,
darkmagenta = 0.07353047651207,
darkolivegreen = 0.12651920884889,
darkorange = 0.40016167026524,
darkorchid = 0.13413142174857,
darkred = 0.054889674531132,
darksalmon = 0.40541471563381,
darkseagreen = 0.43789249325969,
darkslateblue = 0.065792846227988,
darkslategray = 0.067608151928044,
darkslategrey = 0.067608151928044,
darkturquoise = 0.4874606277449,
darkviolet = 0.10999048339343,
deeppink = 0.23866895828276,
deepskyblue = 0.44481603395575,
dimgray = 0.14126329114027,
dimgrey = 0.14126329114027,
dodgerblue = 0.27442536991456,
firebrick = 0.10724525535015,
floralwhite = 0.95922484825004,
forestgreen = 0.18920812076002,
fuchsia = 0.2848,
gainsboro = 0.71569350050648,
ghostwhite = 0.94311261886323,
gold = 0.69860877428159,
goldenrod = 0.41919977809569,
gray = 0.2158605001139,
green = 0.15438342968146,
greenyellow = 0.80609472611453,
grey = 0.2158605001139,
honeydew = 0.96336535554782,
hotpink = 0.34658438169715,
indianred = 0.21406134963884,
indigo = 0.03107561486337,
ivory = 0.99071270600615,
khaki = 0.77012343394121,
lavender = 0.80318750514521,
lavenderblush = 0.90172748631046,
lawngreen = 0.73905893124963,
lemonchiffon = 0.94038992245622,
lightblue = 0.63709141280807,
lightcoral = 0.35522120733135,
lightcyan = 0.94587293494829,
lightgoldenrodyellow = 0.93348351018297,
lightgray = 0.65140563741982,
lightgreen = 0.69091979956865,
lightgrey = 0.65140563741982,
lightpink = 0.58566152734898,
lightsalmon = 0.4780675225206,
lightseagreen = 0.35050145117042,
lightskyblue = 0.56195637618331,
lightslategray = 0.23830165007287,
lightslategrey = 0.23830165007287,
lightsteelblue = 0.53983888284666,
lightyellow = 0.98161818392882,
lime = 0.7152,
limegreen = 0.44571042246098,
linen = 0.88357340984379,
magenta = 0.2848,
maroon = 0.045891942324215,
mediumaquamarine = 0.49389703310801,
mediumblue = 0.044077780212328,
mediumorchid = 0.21639251153773,
mediumpurple = 0.22905858091648,
mediumseagreen = 0.34393112338131,
mediumslateblue = 0.20284629471622,
mediumspringgreen = 0.70704308194184,
mediumturquoise = 0.5133827926448,
mediumvioletred = 0.14371899849357,
midnightblue = 0.02071786635086,
mintcream = 0.97834604947588,
mistyrose = 0.82183047859185,
moccasin = 0.80083000991567,
navajowhite = 0.76519682342785,
navy = 0.015585128108224,
oldlace = 0.91900633405549,
olive = 0.20027537200568,
olivedrab = 0.22593150951929,
orange = 0.4817026703631,
orangered = 0.25516243753416,
orchid = 0.31348806761439,
palegoldenrod = 0.78792647887614,
palegreen = 0.77936759006353,
paleturquoise = 0.76436077921714,
palevioletred = 0.28754994117889,
papayawhip = 0.87797100199835,
peachpuff = 0.74905589878251,
peru = 0.30113074877936,
pink = 0.63271070702466,
plum = 0.45734221587969,
powderblue = 0.68254586500605,
purple = 0.061477070432439,
rebeccapurple = 0.07492341159447,
red = 0.2126,
rosybrown = 0.32319457649407,
royalblue = 0.16663210743188,
saddlebrown = 0.097922285020521,
salmon = 0.36977241527596,
sandybrown = 0.46628543696283,
seagreen = 0.19734199706275,
seashell = 0.92737862206922,
sienna = 0.13697631337098,
silver = 0.52711512570581,
skyblue = 0.55291668518184,
slateblue = 0.14784278062136,
slategray = 0.20896704076536,
slategrey = 0.20896704076536,
snow = 0.96533341834849,
springgreen = 0.73052306068529,
steelblue = 0.20562642207625,
tan = 0.48237604163921,
teal = 0.16996855778968,
thistle = 0.56818401093733,
tomato = 0.30638612719415,
turquoise = 0.5895536427578,
violet = 0.40315452986676,
wheat = 0.74909702820482,
white = 1,
whitesmoke = 0.91309865179342,
yellow = 0.9278,
yellowgreen = 0.50762957208707,
}
6ae47fdb24de4eed5ec26d203faf5341a388987b
Module:For
828
107
231
230
2023-06-06T08:51:38Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:For]]: w
Scribunto
text/plain
local mArguments --initialize lazily
local mHatlist = require('Module:Hatnote list')
local mHatnote = require('Module:Hatnote')
local yesNo = require('Module:Yesno')
local p = {}
--Implements {{For}} from the frame
--uses capitalized "For" to avoid collision with Lua reserved word "for"
function p.For (frame)
mArguments = require('Module:Arguments')
return p._For(mArguments.getArgs(frame))
end
--Implements {{For}} but takes a manual arguments table
function p._For (args)
local use = args[1]
if (not use) then
return mHatnote.makeWikitextError(
'no context parameter provided. Use {{other uses}} for "other uses" hatnotes.',
'Template:For#Errors',
args.category
)
end
local pages = {}
function two (a, b) return a, b, 1 end --lets us run ipairs from 2
for k, v in two(ipairs(args)) do table.insert(pages, v) end
local title = mw.title.getCurrentTitle()
local skipCat = title.isTalkPage or title.namespace == 2 --don't categorise talk pages and userspace
local oddCat = skipCat and '' or '[[Category:Hatnote templates using unusual parameters]]'
local category = yesNo(args.category)
return mHatnote._hatnote(
mHatlist.forSeeTableToString({{use = use, pages = pages}}),
{selfref = args.selfref}
) .. (
(use == 'other uses') and ((category == true) or (category == nil)) and
oddCat or ''
)
end
return p
2faf1bd8c657f3425af829cbde9733a936d8d4f4
Template:Para
10
108
233
232
2023-06-06T08:51:38Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Para]]: w
wikitext
text/x-wiki
<code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">|{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}=}}{{{2|}}}</code><noinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
</noinclude>
06006deea2ed5d552aab61b4332321ab749ae7e8
Template:Navbar
10
109
235
234
2023-06-06T08:51:39Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Navbar]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbar|navbar}}</includeonly><noinclude>
{{documentation}}
</noinclude>
868e3566b7e8a9a5a7f3dac75cac429c47de10d3
Template:Hatnote
10
110
237
236
2023-06-06T08:51:39Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Hatnote]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Hatnote|hatnote}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
4a1d1028d07c9056022807a96051e1c82cf2a1c7
Template:Documentation
10
15
239
30
2023-06-06T08:51:40Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Documentation]]: w
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude>
{{documentation|content=
{{Lua|Module:Documentation}}
<translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate>
<translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate>
<translate>
==Usage== <!--T:2-->
===Customizing display=== <!--T:3-->
<!--T:4-->
Overrides exist to customize the output in special cases:
</translate>
* <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate>
<translate>
==Rationale== <!--T:6-->
</translate>
<translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate>
<translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate>
<translate>
==See also== <!--T:9-->
</translate>
* <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate>
* {{tim|Documentation}}
* <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate>
}}
[[Category:Formatting templates{{#translation:}}|Template documentation]]
[[Category:Template documentation{{#translation:}}| ]]
</noinclude><includeonly>{{#if:{{{content|}}}|
[[Category:Template documentation pages{{#translation:}}]]
}}</includeonly>
e9a25c87d40f5882dd425c83ed4d3be628082f3c
Module:Documentation
828
25
241
50
2023-06-06T08:51:40Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Documentation]]: w
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local i18n = mw.loadData('Module:Documentation/i18n')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4)
end
local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
return ret
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Load TemplateStyles
----------------------------------------------------------------------------
p.main = function(frame)
local parent = frame.getParent(frame)
local output = p._main(parent.args)
return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output
end
----------------------------------------------------------------------------
-- Main function
----------------------------------------------------------------------------
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--
-- Messages:
-- 'main-div-id' --> 'template-documentation'
-- 'main-div-classes' --> 'template-documentation iezoomfix'
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
-- This div tag is from {{documentation/start box}}, but moving it here
-- so that we don't have to worry about unclosed tags.
:tag('div')
:attr('id', message('main-div-id'))
:addClass(message('main-div-class'))
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:done()
:wikitext(p._endBox(args, env))
:wikitext(p.addTrackingCategories(env))
return tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title objects and other namespace- or
-- path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
-- env.printTitle - the print version of the template, located at the /Print subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.printTitle()
--[[
-- Title object for the /Print subpage.
-- Messages:
-- 'print-subpage' --> 'Print'
--]]
return env.templateTitle:subPageTitle(message('print-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the same as the
-- subject namespace. However, pages in the Article, File, MediaWiki or Category
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local frame = mw.getCurrentFrame()
local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed.
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if isPreviewing or not compareUrl then
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
else
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
text = text .. makeCategoryLink(message('sandbox-category'))
omargs.text = text
omargs.class = message('sandbox-class')
local ret = '<div style="clear: both;"></div>'
ret = ret .. messageBox.main('ombox', omargs)
return ret
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local title = env.title
local protectionLevels
local protectionTemplate = message('protection-template')
local namespace = title.namespace
if not (protectionTemplate and (namespace == 10 or namespace == 828)) then
-- Don't display the protection template if we are not in the template or module namespaces.
return nil
end
protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editLevels = protectionLevels.edit
local moveLevels = protectionLevels.move
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then
-- The page is full-move protected, or full, template, or semi-protected.
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = i18n['view-link-display']
data.editLinkDisplay = i18n['edit-link-display']
data.historyLinkDisplay = i18n['history-link-display']
data.purgeLinkDisplay = i18n['purge-link-display']
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 6 then -- File namespace
preload = message('file-docpage-preload')
elseif subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = i18n['create-link-display']
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities.
s = s:gsub('%]', ']')
return s
end
local ret
local docTitle = data.docTitle
local title = data.title
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
-- 'start-box-link-id' --> 'doc_editlinks'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = i18n['template-namespace-heading']
elseif subjectSpace == 828 then -- Module namespace
data.heading = i18n['module-namespace-heading']
elseif subjectSpace == 6 then -- File namespace
data.heading = i18n['file-namespace-heading']
else
data.heading = i18n['other-namespaces-heading']
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
data.linksClass = message('start-box-linkclasses')
data.linksId = message('start-box-link-id')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
:addClass(message('header-div-class'))
:tag('div')
:addClass(message('heading-div-class'))
:wikitext(data.heading)
local links = data.links
if links then
sbox
:tag('div')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
local cbox = mw.html.create('div')
cbox
:addClass(message('content-div-class'))
:wikitext('\n' .. (content or '') .. '\n')
return tostring(cbox)
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the footer text field.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '')
text = text .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.
if printBlurb then
text = text .. '<br />' .. printBlurb
end
end
end
local ebox = mw.html.create('div')
ebox
:addClass(message('footer-div-class'))
:wikitext(text)
return tostring(ebox)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[w:Wikipedia:Template documentation|documentation]]
-- is [[w:Wikipedia:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle or args.content then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = i18n['edit-link-display']
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = i18n['history-link-display']
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = i18n['create-link-display']
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
function p.makePrintBlurb(args, env)
--[=[
-- Generates the blurb displayed when there is a print version of the template available.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'print-link-display' --> '/Print'
-- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]'
-- .. ' of this template exists at $1.'
-- .. ' If you make a change to this template, please update the print version as well.'
-- 'display-print-category' --> true
-- 'print-category' --> 'Templates with print versions'
--]=]
local printTitle = env.printTitle
if not printTitle then
return nil
end
local ret
if printTitle.exists then
local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))
ret = message('print-blurb', {printLink})
local displayPrintCategory = message('display-print-category', nil, 'boolean')
if displayPrintCategory then
ret = ret .. makeCategoryLink(message('print-category'))
end
end
return ret
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
0e23eec0d3c20c23afcd28849e240b9083dbcf88
Module:Documentation/config
828
26
243
52
2023-06-06T08:51:40Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Documentation/config]]: w
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local _format = require('Module:TNT').format
local function format(id)
return _format('I18n/Documentation', id)
end
local cfg = {} -- Do not edit this line.
cfg['templatestyles-scr'] = 'Module:Documentation/styles.css'
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-template']
-- The name of the template that displays the protection icon (a padlock on enwiki).
cfg['protection-template'] = 'pp-template'
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
-- cfg['protection-template-args']
-- Any arguments to send to the protection template. This should be a Lua table.
-- For example, if the protection template is "pp-template", and the wikitext template invocation
-- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}".
--]]
cfg['protection-template-args'] = {docusage = 'yes'}
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template')
cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module')
cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other')
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb')
cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb')
cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display')
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb')
cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display')
cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb')
cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display')
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = format('transcluded-from-blurb')
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = format('create-module-doc-blurb')
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = format('experiment-blurb-template')
cfg['experiment-blurb-module'] = format('experiment-blurb-module')
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = format('sandbox-link-display')
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display')
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = format('sandbox-create-link-display')
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = format('compare-link-display')
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = format('mirror-link-display')
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = format('testcases-link-display')
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = format('testcases-edit-link-display')
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = format('testcases-create-link-display')
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = format('add-categories-blurb')
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = format('subpages-blurb')
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = format('subpages-link-display')
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = format('template-pagetype')
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = format('module-pagetype')
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = format('default-pagetype')
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['file-docpage-preload']
-- Preload file for documentation page in the file namespace.
cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- Print version configuration
----------------------------------------------------------------------------------------------------
-- cfg['print-subpage']
-- The name of the template subpage used for print versions.
cfg['print-subpage'] = 'Print'
-- cfg['print-link-display']
-- The text to display when linking to the /Print subpage.
cfg['print-link-display'] = '/Print'
-- cfg['print-blurb']
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display'].
cfg['print-blurb'] = format('print-blurb')
-- cfg['display-print-category']
-- Set to true to enable output of cfg['print-category'] if a /Print subpage exists.
-- This should be a boolean value (either true or false).
cfg['display-print-category'] = true
-- cfg['print-category']
-- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists.
cfg['print-category'] = 'Templates with print versions'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['main-div-id']
-- The "id" attribute of the main HTML "div" tag.
cfg['main-div-id'] = 'template-documentation'
-- cfg['main-div-classes']
-- The CSS classes added to the main HTML "div" tag.
cfg['main-div-class'] = 'ts-doc-doc'
cfg['header-div-class'] = 'ts-doc-header'
cfg['heading-div-class'] = 'ts-doc-heading'
cfg['content-div-class'] = 'ts-doc-content'
cfg['footer-div-class'] = 'ts-doc-footer plainlinks'
cfg['sandbox-class'] = 'ts-doc-sandbox'
-- cfg['start-box-linkclasses']
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.
cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks'
-- cfg['start-box-link-id']
-- The HTML "id" attribute for the links in the start box.
cfg['start-box-link-id'] = 'doc_editlinks'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = false
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
224f3664a83268936f1b9935eafc0055a97071ac
Module:Documentation/styles.css
828
34
245
68
2023-06-06T08:51:40Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Documentation/styles.css]]: w
sanitized-css
text/css
.ts-doc-sandbox .mbox-image {
padding:.75em 0 .75em .75em;
}
.ts-doc-doc {
clear: both;
background-color: #eaf3ff;
border: 1px solid #a3caff;
margin-top: 1em;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.ts-doc-header {
background-color: #c2dcff;
padding: .642857em 1em .5em;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.ts-doc-header .ts-tlinks-tlinks {
line-height: 24px;
margin-left: 0;
}
.ts-doc-header .ts-tlinks-tlinks a.external {
color: #0645ad;
}
.ts-doc-header .ts-tlinks-tlinks a.external:visited {
color: #0b0080;
}
.ts-doc-header .ts-tlinks-tlinks a.external:active {
color: #faa700;
}
.ts-doc-content {
padding: .214286em 1em;
}
.ts-doc-content:after {
content: '';
clear: both;
display: block;
}
.ts-doc-heading {
display: inline-block;
padding-left: 30px;
background: center left/24px 24px no-repeat;
/* @noflip */
background-image: url(//upload.wikimedia.org/wikipedia/commons/f/fb/OOjs_UI_icon_puzzle-ltr.svg);
height: 24px;
line-height: 24px;
font-size: 13px;
font-weight: 600;
letter-spacing: 1px;
text-transform: uppercase;
}
.ts-doc-content > *:first-child,
.ts-doc-footer > *:first-child {
margin-top: .5em;
}
.ts-doc-content > *:last-child,
.ts-doc-footer > *:last-child {
margin-bottom: .5em;
}
.ts-doc-footer {
background-color: #eaf3ff;
border: 1px solid #a3caff;
padding: .214286em 1em;
margin-top: .214286em;
font-style: italic;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
@media all and (min-width: 720px) {
.ts-doc-header .ts-tlinks-tlinks {
float: right;
}
}
71b09af67524324bf70d203a0a724bc74ec6c82e
Template:Oldid
10
111
247
246
2023-06-06T08:51:41Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Oldid]]: w
wikitext
text/x-wiki
<span class="plainlinks">[{{fullurl:{{{page|{{{1|Main Page}}}}}}|oldid={{{oldid|{{{2|}}}}}}}} {{{label|{{{title|{{{3|{{#if:{{{oldid|{{{2|}}}}}}|Old revision|Current version}} of {{#if:{{{page|{{{1|}}}}}}|'''{{{page|{{{1}}}}}}'''|a page}}}}}}}}}}}]</span><noinclude>
{{documentation}}
</noinclude>
4a42ae0cc77ec0385d4b6508c5d3f366db39ecdb
Template:Endplainlist
10
112
249
248
2023-06-06T08:51:42Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Endplainlist]]: w
wikitext
text/x-wiki
<includeonly></div></includeonly><noinclude>
{{documentation|Template:Plainlist/doc}}
</noinclude>
d545c41582328dd4f197e2b1848c8ad7392b92e0
Template:Tag
10
40
251
80
2023-06-06T08:51:42Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tag]]: w
wikitext
text/x-wiki
{{#if:{{{plain|}}}|
|<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}">
}}{{#switch:{{{2|pair}}}
|c|close = <!--nothing-->
|s|single
|o|open
|p|pair = {{#tag:span|‎<|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}| {{{params}}}}}
}}{{#switch:{{{2|pair}}}
|c|close = {{{content|}}}
|s|single =  {{#tag:span|/>|class="p"}}
|o|open = {{#tag:span|>|class="p"}}{{{content|}}}
|p|pair = {{#tag:span|>|class="p"}}{{{content|...}}}
}}{{#switch:{{{2|pair}}}
|s|single
|o|open = <!--nothing-->
|c|close
|p|pair = {{#tag:span|‎</|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|>|class="p"}}
}}{{#if:{{{plain|}}}|
|</code>
}}<noinclude>
{{Documentation}}
</noinclude>
88657ad7afd7844d9681f7f08ba60c75c25800a1
Template:Sandbox other
10
24
253
48
2023-06-06T08:51:43Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Sandbox_other]]: w
wikitext
text/x-wiki
<onlyinclude>{{#switch:{{SUBPAGENAME}}|sandbox|doc={{{1|}}}|#default={{{2|}}}}}</onlyinclude>
{{documentation}}
44919af6b57ac865d8ec53eabfcb2cb9de35f157
Template:Documentation subpage
10
18
255
36
2023-06-06T08:51:43Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Documentation_subpage]]: w
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude>{{#switch:<translate></translate>
| =
<includeonly><!--
-->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]]
| text =
'''<translate><!--T:4--> This is a [[w:Wikipedia:Template documentation|documentation]] [[<tvar name=2>Special:MyLanguage/Help:Subpages</tvar>|subpage]] for <tvar name=1>{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}</tvar>.</translate>'''<br /><!--
-->{{#if:{{{text2|}}}{{{text1|}}}
|<translate><!--T:5--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{{text2|{{{text1}}}}}}</tvar>.</translate>
|<translate><!--T:10--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{SUBJECTSPACE}}</tvar> page.</translate>
}}
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}}
| Template | Project = Template
| Module = Module
| User = User
| #default = MediaWiki
}} documentation pages{{#translation:}}]]
| [[Category:Documentation subpages without corresponding pages{{#translation:}}]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{Documentation|content=
<translate>
== Usage == <!--T:6-->
<!--T:7-->
Use this template on Template Documentation subpage (/doc).
== See also == <!--T:8-->
</translate>
*{{tl|Documentation}}
*{{tl|tl}}
}}
</noinclude>
0d6a10a903dbd572fffeb01aff5983d9b3abc65c
Template:Template link with link off
10
113
257
256
2023-06-06T08:51:43Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_link_with_link_off]]: w
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nowrap=yes|nolink=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlf}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
b099fea5d1f36b0b4b9cb253ad3a9f4e095f6851
Template:Tlf
10
114
259
258
2023-06-06T08:51:44Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tlf]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link with link off]]
{{Redirect category shell|
{{R from move}}
}}
52759e1d3f7c9aa4a03d0b7d4f84f4c6adf53edf
Template:Selfref
10
115
261
260
2023-06-06T08:51:44Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Selfref]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Self-reference]]
{{Redirect category shell|
{{R from template shortcut}}
{{R from alternative spelling}}
{{R from move}}
}}
030c372ed4f83fa2e03a4c0ccdd4ad3cef8ec9e6
Template:FULLBASEPAGENAME
10
116
263
262
2023-06-06T08:51:45Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:FULLBASEPAGENAME]]: w
wikitext
text/x-wiki
{{#if: {{Ns has subpages | {{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} }}
| {{#if: {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}}
| {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}}
| {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}
}}
| {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}
}}<noinclude>
{{documentation}}
</noinclude>
a21f32ffc20eab6d41631b3fb8af4c63e153a6c3
Template:High-use
10
117
265
264
2023-06-06T08:51:45Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:High-use]]: w
wikitext
text/x-wiki
{{#invoke:High-use|main|1={{{1|}}}|2={{{2|}}}|info={{{info|}}}|demo={{{demo|}}}|form={{{form|}}}|expiry={{{expiry|}}}|system={{{system|}}}}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage; interwiki links go to Wikidata, thank you! -->
</noinclude>
a3322d1bd47ac03df14fa2090855cff4fede9bc7
Template:TemplateData header
10
21
267
42
2023-06-06T08:51:46Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:TemplateData_header]]: w
wikitext
text/x-wiki
<noinclude>
<languages/>
<onlyinclude>{{#switch:<translate></translate>
|=
<div class="templatedata-header"><!--
-->{{#if:{{yesno|{{{editlinks|}}}}}<!--
-->|{{#ifexpr:<!--
-->{{#if:{{{docpage|}}}<!--
-->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!--
-->|not{{IsDocSubpage|false=0}}<!--
-->}}<!--
-->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!--
-->}}<!--
-->}}
{{#if:{{{noheader|}}}||<translate><!--T:1--> This is the [[<tvar name=1>Special:MyLanguage/Help:TemplateData</tvar>|TemplateData]] documentation for this template used by [[<tvar name=2>Special:MyLanguage/VisualEditor</tvar>|VisualEditor]] and other tools.</translate>}}
'''{{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!--
-->|{{#if:{{IsDocSubpage|false=}}<!--
-->|[[Category:TemplateData documentation{{#translation:}}]]<!--
-->|[[Category:Templates using TemplateData{{#translation:}}]]<!--
-->}}<!--
-->}}</includeonly>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}}
}}</onlyinclude>
{{Documentation|content=
Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]].
== Usage ==
{{#tag:syntaxhighlight|
==TemplateData== or ==Parameters== or ==Usage==
{{((}}TemplateData header{{))}}
{{^(}}templatedata{{)^}}{
...
}{{^(}}/templatedata{{)^}}
|lang=html
}}
Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]].
<dl><dd>
{{TemplateData header|Template name}}
</dd></dl>
Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text.
<dl><dd>
{{TemplateData header|noheader=1}}
</dd></dl>
==Parameters==
{{TemplateData header/doc}}
}}
</noinclude>
adcf50c8d3c870a44b190116c53a975926dc17d8
Template:Template parameter usage
10
118
269
268
2023-06-06T08:51:46Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_parameter_usage]]: w
wikitext
text/x-wiki
{{#switch:{{{label|}}}
|=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|C|c}}lick here] to see a monthly parameter usage report for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|this template}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|None|none=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
|for|For=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|[[Template:{{ROOTPAGENAME}}]]}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|#default=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{{label|}}}]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
}}<noinclude>
{{documentation}}
</noinclude>
b9cdd1b2e409313904f041c38562a3d6221cc017
Module:High-use
828
119
271
270
2023-06-06T08:51:46Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:High-use]]: w
Scribunto
text/plain
local p = {}
-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch
local yesno = require('Module:Yesno')
function p.num(frame, count)
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
-- Build output string
local return_value = ""
if count == nil then
if frame.args[1] == "risk" then
return_value = "a very large number of"
else
return_value = "many"
end
else
-- Use 2 significant figures for smaller numbers and 3 for larger ones
local sigfig = 2
if count >= 100000 then
sigfig = 3
end
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(count)) - sigfig + 1
-- Round and insert "approximately" or "+" when appropriate
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
-- Round down
return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
else
-- Round to nearest
return_value = string.format("approximately %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
end
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
if percent >= 1 then
return_value = string.format("%s pages, or roughly %s%% of all", return_value, percent)
end
end
end
return return_value
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
function p.risk(frame)
local return_value = ""
if frame.args[1] == "risk" then
return_value = "risk"
else
local count = _fetch(frame)
if count and count >= 100000 then return_value = "risk" end
end
return return_value
end
function p.text(frame, count)
-- Only show the information about how this template gets updated if someone
-- is actually editing the page and maybe trying to update the count.
local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or ''
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" then
title = title.basePageTitle
end
local systemMessages = frame.args['system']
if frame.args['system'] == '' then
systemMessages = nil
end
-- This retrieves the project URL automatically to simplify localiation.
local templateCount = ('on [https://linkcount.toolforge.org/index.php?project=%s&page=%s %s pages]'):format(
mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'),
mw.uri.encode(title.fullText), p.num(frame, count))
local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used ';
if systemMessages then
used_on_text = used_on_text .. systemMessages ..
((count and count > 2000) and ("''', and " .. templateCount) or ("'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local sandbox_text = ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format(
(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"),
title.fullText, title.fullText,
mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage"
)
local infoArg = frame.args["info"] ~= "" and frame.args["info"]
if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
local info = systemMessages and '.<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or '.'
if infoArg then
info = info .. "<br />" .. infoArg
end
sandbox_text = info .. '<br /> To avoid major disruption' ..
(count and count >= 100000 and ' and server load' or '') ..
', any changes should be tested in the ' .. sandbox_text ..
'The tested changes can be added to this page in a single edit. '
else
sandbox_text = (infoArg and ('.<br />' .. infoArg .. ' C') or ' and c') ..
'hanges may be widely noticed. Test changes in the ' .. sandbox_text
end
local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes '
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"])
else
discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText )
end
return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text
end
function p.main(frame)
local count = nil
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local epilogue = ''
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
type_param = "content"
local nocat = frame:getParent().args['nocat'] or frame.args['nocat']
local categorise = (nocat == '' or not yesno(nocat))
if categorise then
epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}')
end
elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
type_param = "content"
end
if frame.args["form"] == "editnotice" then
return frame:expandTemplate{
title = 'editnotice',
args = {
["image"] = image,
["text"] = p.text(frame, count),
["expiry"] = (frame.args["expiry"] or "")
}
} .. epilogue
else
return require('Module:Message box').main('ombox', {
type = type_param,
image = image,
text = p.text(frame, count),
expiry = (frame.args["expiry"] or "")
}) .. epilogue
end
end
return p
134551888e066954a89c109d2faa8af71a4454a4
Module:Transclusion count
828
120
273
272
2023-06-06T08:51:47Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Transclusion_count]]: w
Scribunto
text/plain
local p = {}
function p.fetch(frame)
local template = nil
local return_value = nil
-- Use demo parameter if it exists, otherswise use current template name
local namespace = mw.title.getCurrentTitle().namespace
if frame.args["demo"] and frame.args["demo"] ~= "" then
template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","")
elseif namespace == 10 then -- Template namespace
template = mw.title.getCurrentTitle().text
elseif namespace == 828 then -- Module namespace
template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text)
end
-- If in template or module namespace, look up count in /data
if template ~= nil then
namespace = mw.title.new(template, "Template").namespace
if namespace == 10 or namespace == 828 then
template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end
template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end
local index = mw.ustring.sub(mw.title.new(template).text,1,1)
local status, data = pcall(function ()
return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")))
end)
if status then
return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")])
end
end
end
-- If database value doesn't exist, use value passed to template
if return_value == nil and frame.args[1] ~= nil then
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
if arg1 and arg1 ~= '' then
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
end
end
return return_value
end
-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]]
function p.tabulate(frame)
local list = {}
for i = 65, 91 do
local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i)))
for name, count in pairs(data) do
table.insert(list, {mw.title.new(name, "Template").fullText, count})
end
end
table.sort(list, function(a, b)
return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2])
end)
local lang = mw.getContentLanguage();
for i = 1, #list do
list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2]))
end
return table.concat(list)
end
return p
000ef6bcbf7b66e727870b0c300c4009da300513
Module:Lua banner
828
121
275
274
2023-06-06T08:51:47Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Lua_banner]]: w
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules)
local trackingCategories = p.renderTrackingCategories(args, modules)
return box .. trackingCategories
end
function p.renderBox(modules)
local boxArgs = {}
if #modules < 1 then
boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
local maybeSandbox = mw.title.new(module .. '/sandbox')
if maybeSandbox.exists then
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
end
end
local moduleList = mList.makeList('bulleted', moduleLinks)
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" then
title = title.basePageTitle
end
if title.contentModel == "Scribunto" then
boxArgs.text = 'This module depends on the following other modules:' .. moduleList
else
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]'
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj)
if yesno(args.nocat) then
return ''
end
local cats = {}
-- Error category
if #modules < 1 then
cats[#cats + 1] = 'Lua templates with errors'
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if not subpageBlacklist[titleObj.subpageText] then
local protCatName
if titleObj.namespace == 10 then
local category = args.category
if not category then
local categories = {
['Module:String'] = 'Templates based on the String Lua module',
['Module:Math'] = 'Templates based on the Math Lua module',
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module'
}
category = modules[1] and categories[modules[1]]
category = category or 'Lua-based templates'
end
cats[#cats + 1] = category
protCatName = "Templates using under-protected Lua modules"
elseif titleObj.namespace == 828 then
protCatName = "Modules depending on under-protected modules"
end
if not args.noprotcat and protCatName then
local protLevels = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
local currentProt
if titleObj.id ~= 0 then
-- id is 0 (page does not exist) if am previewing before creating a template.
currentProt = titleObj.protectionLevels["edit"][1]
end
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end
for i, module in ipairs(modules) do
if module ~= "WP:libraryUtil" then
local moduleProt = mw.title.new(module).protectionLevels["edit"][1]
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end
if moduleProt < currentProt then
cats[#cats + 1] = protCatName
break
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
03ec1b34a40121efc562c0c64a67ebbf57d56dff
Template:Lua
10
122
277
276
2023-06-06T08:51:47Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Lua]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude>
{{Lua|Module:Lua banner}}
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7
Template:Clc
10
123
279
278
2023-06-06T08:51:48Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Clc]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Category link with count]]
02280e2ab57b544236e11f913e3759c5781ca9d5
Template:Category link with count
10
124
281
280
2023-06-06T08:51:48Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Category_link_with_count]]: w
wikitext
text/x-wiki
[[:Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|<!--
-->{{#if:{{{name|}}}|{{{name}}}|Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}}}<!--
-->]] ({{PAGESINCATEGORY:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|{{{2|all}}}}})<noinclude>
{{Documentation}}
</noinclude>
f93f1540b8c157703bd6d24ae35c35bef745981d
Template:Self-reference
10
125
283
282
2023-06-06T08:51:49Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Self-reference]]: w
wikitext
text/x-wiki
{{#switch:{{{2|NONE}}}
|NONE|hatnote|hat={{Hatnote|extraclasses=plainlinks selfreference noprint|1={{{1}}}}}
|inline=<div class="plainlinks selfreference" style="display:inline; font-style: italic;"><!--Same style as class hatnote.-->{{{1}}}</div>
|<!--Matching the empty string here for unprintworthy content is for backwards compatibility with the 2006-2008 version. Do not depend on it!-->=<div style="display:inline;" class="plainlinks selfreference noprint">{{{1}}}</div>
|#default={{error|Second parameter must be <code>hatnote</code>, <code>hat</code>, or <code>inline</code>}}
}}<noinclude>
{{Documentation}}
<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES THE /doc SUBPAGE, AND INTERWIKIS TO WIKIDATA, THANKS -->
</noinclude>
0c4a08f880070e918c3edcaa50cc493f99841e98
Template:TemplateDataHeader
10
126
285
284
2023-06-06T08:51:49Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:TemplateDataHeader]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:TemplateData header]]
{{R from move}}
61e461016bcb3a0a6fc4d8aea35d590298c19630
Template:Template display
10
127
287
286
2023-06-06T08:51:49Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_display]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Message box|ombox|type=notice
|image={{#switch:{{{1}}}|adaptive=[[File:Different devices simple.svg|65x65px|link=|alt=]]|nomobile=[[File:Handheld devices no.svg|55px|link=|alt=]]|nodesktop=[[File:Desktop devices no.svg|55px|link=|alt=]]}}
|text={{#switch:{{{1}}}
| adaptive = This template is [[Adaptive web design|responsive]] and <strong>displays differently in mobile and desktop view</strong>. Read the documentation for an explanation of the differences and why they exist.
| nomobile = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the documentation for an explanation.
| nodesktop = This template does ''not'' display in the desktop view of Wikipedia; it is <strong>mobile only</strong>. Read the documentation for an explanation.
| nomobilesidebar = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the [[Template:Sidebar/doc|parent documentation]] for an explanation.
| vector2022 = This template does not work properly in the [[Wikipedia:Vector 2022|Vector 2022]] skin. Read the documentation for an explanation.
| #default = {{{1}}}
}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
47cc41eacc2d2dec246f01b81111b280cec901a3
Template:Navbox suite
10
128
289
288
2023-06-06T08:51:50Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Navbox_suite]]: w
wikitext
text/x-wiki
{{#invoke:sidebar|sidebar
| width = auto
| bodystyle = border-spacing:0;background:#f7f7f7;padding:2px;
| title = Navbox suite
| titlestyle = padding: 0.2em 0.8em; font-size: 145%; line-height: 1.2em; background-color: #ccf;
| contentclass = plainlist
| contentstyle = padding:0.25em;background:#fdfdfd;
| content1 =
*{{tl|Navbox}}
*{{tl|Navbox with collapsible groups}}
*{{tl|Navbox with columns}}
*{{tl|Navboxes}}
| navbarstyle = background:#fdfdfd;padding:0 5px
}}<!--
NOTE: A template MUST support all of the parameters marked with a cross in Template:Navbox/doc in order to be Navbox suite compliant.
In particular, the name, state, border, and navbar parameters are especially important.
--><noinclude>
{{Documentation|content=
Helper template for linking between main navbox templates in their documentation.
[[Category:Wikipedia-internal sidebar templates]]
[[Category:Navigational boxes|Δ]]<!-- Δ for documentation ([[WP:SORTKEY]]) -->
[[Category:Documentation see also templates]]
}}
</noinclude>
96300845706c925e4c1e1f1f511ad327cee6d0cf
Template:Lua sidebar
10
129
291
290
2023-06-06T08:51:51Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Lua_sidebar]]: w
wikitext
text/x-wiki
{{Sidebar
| class = lua-sidebar
| templatestyles = Template:Lua sidebar/styles.css
| title = Related pages
| content1 = {{plainlist}}
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|Template]] {{#if:{{#invoke:redirect|isRedirect|Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}}
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Template sandbox]]
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Template testcases]]
* [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Template doc]]
* [[Special:PrefixIndex/Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/|Template subpages]]
* [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|Module]] {{#if:{{#invoke:redirect|isRedirect|Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}}
* [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Module sandbox]]
* [[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Module testcases]]
* [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Module doc]]
* [[Special:PrefixIndex/Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/|Module subpages]]
{{endplainlist}}
| content2 = {{{1|}}}
}}<noinclude>
{{Documentation}}
</noinclude>
f11e49d67a400d29f6d73720fea7eb5a273ab663
Template:Lua sidebar/styles.css
10
130
293
292
2023-06-06T08:51:51Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Lua_sidebar/styles.css]]: w
sanitized-css
text/css
.lua-sidebar {
width: auto;
max-width: 22em;
}
9984d36eb49fae70dd00527c993784d775409a6b
Template:Navbox visibility
10
131
295
294
2023-06-06T08:51:52Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Navbox_visibility]]: w
wikitext
text/x-wiki
Templates using the classes <code>class=navbox</code> ({{tl|navbox}}) or <code>class=nomobile</code> ({{tl|sidebar}}) are not displayed on the [https://en.m.wikipedia.org/ mobile web site] of English Wikipedia. Mobile page views account for approximately 65% of all page views (90-day average {{as of|May 2023|lc=y}}).<noinclude>
{{documentation}}
</noinclude>
3b1f65df829fd9f96b9c4f002fba38a0fd987a6b
Template:PAGENAMETDOC
10
132
297
296
2023-06-06T08:51:52Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:PAGENAMETDOC]]: w
wikitext
text/x-wiki
{{#ifeq:{{#invoke:String|find|{{FULLPAGENAME}}|/sandbox%d*$|plain=false}}|0|{{{{#if:{{{1|}}}||FULL}}BASEPAGENAME}}|{{{{#if:{{{1|}}}||FULL}}PAGENAME}}}}<noinclude>
{{Documentation|content=
This template returns the current {{Tlx|FULLBASEPAGENAME}}, unless the title ends in <code>/sandbox</code> plus any number of digits, in which case it returns the {{tlx|FULLPAGENAME}}. It is primarily meant for demonstrating the sandbox version of templates in their documentation.
This template takes one numbered parameter (<code>1</code>); if anything is in this parameter then it will return <code>{{BASEPAGENAME}}</code> and <code>{{PAGENAME}}</code>, which have no namespace prefix.
}}
[[Category:Wikipedia magic word templates]]
</noinclude>
ae0c3ac1a7415671c46f970d5faad2fd708640b0
Template:Navigation templates
10
133
299
298
2023-06-06T08:51:53Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Navigation_templates]]: w
wikitext
text/x-wiki
{| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;"
|+ Navigation templates comparison {{Navbar|Navigation templates|plain=1|brackets=y}}
|-
! Template
! Collapsible !! Header color
! Image !! Groups !! Style (body) <br /> parameter/s
|-
| style="text-align: left;" | {{tl|Navbox}}
| collapsible || style="background: #ccf;" | navbox
| Left/right of body || Yes || Yes
|-
| style="text-align: left;" | {{tl|Navbox with collapsible groups}}
| collapsible || style="background: #ccf;" | navbox
| Left/right of body and/or in each list || Yes || Yes
|-
| style="text-align: left;" | {{tl|Navbox with columns}}
| collapsible || style="background: #ccf;" | navbox
| Left/right of columns || No || Yes
|}
{| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;"
|+ Collapsible attributes
|-
! Type !! CSS classes !! JavaScript !! Collapses when !! Custom <br /> initial state !! Nesting
|-
| style="text-align:left;" | [[Help:Collapsing|Collapsible tables]]
| mw-collapsible
| Defined in [[MediaWiki:Common.js|Common.js]]
| 2 or more autocollapse on page || Yes || Yes
|}<noinclude>
[[Category:Navigational boxes|Δ]]
[[Category:Documentation shared content templates]]</noinclude>
64df85f0aa0ebaa7b3cbfa4c05af256a71c18c39
Module:Transclusion count/data/N
828
134
301
300
2023-06-06T08:51:53Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Transclusion_count/data/N]]: w
Scribunto
text/plain
return {
["N"] = 15000,
["N.b."] = 2200,
["N/A"] = 23000,
["N/a"] = 53000,
["NA-Class"] = 14000,
["NASTRO_comment"] = 30000,
["NBA_Draft_template_list"] = 3400,
["NBA_Year"] = 5500,
["NBA_color"] = 3600,
["NBA_color_cell"] = 4300,
["NBA_color_cell2"] = 3400,
["NBA_player_statistics_legend"] = 4200,
["NBA_player_statistics_start"] = 3800,
["NBbox"] = 3400,
["NCAA_color_cell"] = 9600,
["NCAA_secondary_color_cell"] = 4100,
["NCES_District_ID"] = 2600,
["NED"] = 9600,
["NEXTYEAR"] = 7700,
["NFLAltPrimaryStyle"] = 5800,
["NFLPrimaryColor"] = 2200,
["NFLPrimaryStyle"] = 28000,
["NFLSecondaryColor"] = 19000,
["NFL_Roster_navbox_template_list"] = 2600,
["NFL_Year"] = 23000,
["NFL_predraft"] = 5800,
["NFL_predraft/check"] = 5800,
["NFL_predraft/ftin"] = 5800,
["NFLplayer"] = 2100,
["NFT"] = 6800,
["NFT_player"] = 30000,
["NGA"] = 3200,
["NGR"] = 2300,
["NHLE"] = 18000,
["NHLS_url"] = 2200,
["NLD"] = 11000,
["NLM_content"] = 2800,
["NOINDEX"] = 449000,
["NOMIS2011"] = 2300,
["NOR"] = 9400,
["NRDB_species"] = 6900,
["NRHP-PA"] = 2600,
["NRHPGoogleMapFootnote"] = 2500,
["NRHP_Focus"] = 76000,
["NRHP_color"] = 3700,
["NRHP_date_for_lists"] = 3100,
["NRHP_date_for_lists/dates"] = 3100,
["NRHP_header"] = 3300,
["NRHP_navigation_box"] = 8300,
["NRHP_row"] = 3400,
["NRHP_style"] = 70000,
["NRHP_url"] = 29000,
["NRHP_url/core"] = 31000,
["NRISref"] = 73000,
["NSWcity"] = 2100,
["NSWcity/core"] = 2100,
["NUMBEROFSECTIONS"] = 4700,
["NYCS_br"] = 2700,
["NYCS_time_2"] = 3100,
["NZL"] = 6700,
["NZ_electorate_link"] = 2300,
["Na"] = 2400,
["Nac"] = 2700,
["Namespace_detect"] = 568000,
["Namespace_detect_showall"] = 9600,
["Nastaliq"] = 10000,
["Nat_fs_end"] = 2400,
["National_Film_Awards/style"] = 2000,
["National_Heritage_List_for_England"] = 22000,
["National_Rail_style"] = 5700,
["National_Register_of_Historic_Places"] = 29000,
["National_Register_of_Historic_Places_in_Massachusetts"] = 4400,
["National_Register_of_Historic_Places_in_New_York"] = 5600,
["National_Register_of_Historic_Places_in_North_Carolina"] = 2900,
["National_Register_of_Historic_Places_in_Pennsylvania"] = 3200,
["National_Register_of_Historic_Places_in_Virginia"] = 3100,
["National_basketball_squad"] = 3300,
["National_field_hockey_squad"] = 4000,
["National_football_squad_end"] = 2900,
["National_football_squad_start/styles.css"] = 2400,
["National_rugby_union_team"] = 3600,
["National_squad"] = 41000,
["National_squad_no_numbers"] = 17000,
["Native_name"] = 16000,
["Native_name_checker"] = 80000,
["Naval"] = 2900,
["Naval/core"] = 2900,
["Navbar"] = 40000,
["Navbar-collapsible"] = 3600,
["Navbar-header"] = 15000,
["Navbar-header/styles.css"] = 15000,
["Navbox"] = 3050000,
["Navbox_GR_munic"] = 3500,
["Navbox_Musical_artist"] = 9700,
["Navbox_bottom"] = 15000,
["Navbox_decade_list"] = 11000,
["Navbox_ice_hockey"] = 3100,
["Navbox_musical_artist"] = 220000,
["Navbox_musical_artist/color"] = 220000,
["Navbox_rugby_league_squad"] = 4900,
["Navbox_season_by_team"] = 3100,
["Navbox_top"] = 15000,
["Navbox_with_collapsible_groups"] = 131000,
["Navbox_with_collapsible_sections"] = 2300,
["Navbox_with_columns"] = 24000,
["Navboxes"] = 55000,
["Navboxes_colour"] = 5300,
["Navseasoncats"] = 479000,
["Navseasoncats_with_centuries_below_decade"] = 6700,
["Navseasoncats_with_decades_below_year"] = 18000,
["Navsource"] = 2500,
["Navy"] = 19000,
["Navy/core"] = 19000,
["Nay"] = 19000,
["Nbay"] = 5500,
["Nbsp"] = 480000,
["Nbsp_to_space"] = 20000,
["Ndash"] = 20000,
["Nee"] = 9000,
["NeilBrownPlayers"] = 3100,
["New_user_bar"] = 57000,
["Newbot"] = 4200,
["Next_period"] = 21000,
["Nfly"] = 2200,
["Nihongo"] = 102000,
["Nihongo2"] = 12000,
["Nihongo_foot"] = 2600,
["No"] = 8300,
["No."] = 14000,
["No2"] = 10000,
["NoSpam"] = 3900,
["NoSpamEmail"] = 17000,
["No_col_break"] = 2300,
["No_col_break/styles.css"] = 2300,
["No_footnotes"] = 51000,
["No_ping"] = 376000,
["No_plot"] = 5700,
["No_redirect"] = 562000,
["No_spam"] = 258000,
["No_wrap"] = 2300,
["Nobold"] = 382000,
["Nobold/styles.css"] = 382000,
["Nobr"] = 4700,
["Nobreak"] = 28000,
["Nochange"] = 2400,
["Noindex"] = 4800,
["Noitalic"] = 4500,
["Noitalic/styles.css"] = 4500,
["Nom"] = 40000,
["Nominated"] = 7100,
["Non-English-language_text_category"] = 2500,
["Non-admin_closure"] = 2800,
["Non-diffusing_subcategory"] = 13000,
["Non-free_2D_art"] = 7200,
["Non-free_3D_art"] = 2500,
["Non-free_album_cover"] = 201000,
["Non-free_audio_sample"] = 8400,
["Non-free_biog-pic"] = 25000,
["Non-free_book_cover"] = 55000,
["Non-free_character"] = 2400,
["Non-free_comic"] = 11000,
["Non-free_fair_use"] = 17000,
["Non-free_fair_use_in"] = 14000,
["Non-free_film_poster"] = 24000,
["Non-free_film_screenshot"] = 5000,
["Non-free_game_cover"] = 7400,
["Non-free_game_screenshot"] = 4600,
["Non-free_historic_image"] = 16000,
["Non-free_image_data"] = 8600,
["Non-free_image_rationale"] = 9800,
["Non-free_in_US"] = 2100,
["Non-free_logo"] = 162000,
["Non-free_magazine_cover"] = 7700,
["Non-free_media"] = 729000,
["Non-free_media_data"] = 9800,
["Non-free_media_rationale"] = 11000,
["Non-free_movie_poster"] = 22000,
["Non-free_newspaper_image"] = 2000,
["Non-free_poster"] = 80000,
["Non-free_promotional"] = 8800,
["Non-free_school_logo"] = 2400,
["Non-free_seal"] = 4400,
["Non-free_symbol"] = 6100,
["Non-free_television_screenshot"] = 16000,
["Non-free_title-card"] = 5600,
["Non-free_use_rationale"] = 461000,
["Non-free_use_rationale/styles.css"] = 680000,
["Non-free_use_rationale_2"] = 211000,
["Non-free_use_rationale_album_cover"] = 134000,
["Non-free_use_rationale_book_cover"] = 19000,
["Non-free_use_rationale_logo"] = 94000,
["Non-free_use_rationale_poster"] = 51000,
["Non-free_use_rationale_title-card"] = 2700,
["Non-free_use_rationale_video_cover"] = 5800,
["Non-free_use_rationale_video_game_cover"] = 10000,
["Non-free_video_cover"] = 16000,
["Non-free_video_game_cover"] = 21000,
["Non-free_video_game_cover/platform"] = 21000,
["Non-free_video_game_screenshot"] = 10000,
["Non-free_video_game_screenshot/platform"] = 9600,
["Non-free_with_NC"] = 2700,
["Non-free_with_permission"] = 2100,
["Nonspecific"] = 2200,
["Nonumtoc"] = 2700,
["Nonumtoc/styles.css"] = 2700,
["Noping"] = 366000,
["Noprint"] = 2900,
["Noredirect"] = 8300,
["Normal"] = 5900,
["Normalwraplink"] = 3500,
["NorthAmNative"] = 2000,
["North_America_topic"] = 3500,
["Northern_Ireland_tasks"] = 19000,
["Nospam"] = 20000,
["Not-PD-US-expired-min-year"] = 26000,
["Not_a_ballot"] = 7700,
["Not_a_forum"] = 7700,
["Not_a_typo"] = 11000,
["Not_around"] = 2900,
["Not_done"] = 20000,
["Notability"] = 63000,
["Notavote"] = 2100,
["Notdone"] = 5500,
["Note"] = 25000,
["NoteFoot"] = 3900,
["NoteTag"] = 3900,
["Note_label"] = 9000,
["Notelist"] = 183000,
["Notelist-lr"] = 3500,
["Notelist-ua"] = 6700,
["Notes"] = 6500,
["Noteslist"] = 3600,
["Notice"] = 113000,
["NovelsWikiProject"] = 19000,
["Nowiki_="] = 2300,
["Nowrap"] = 835000,
["Np"] = 2900,
["Npby"] = 2500,
["Nq"] = 3700,
["Nrut"] = 3600,
["Ns"] = 2600,
["Ns0"] = 107000,
["Ns_has_subpages"] = 2170000,
["Nts"] = 20000,
["Ntsh"] = 3300,
["Number_of_defined_parameters"] = 4800,
["Number_table_sorting"] = 34000,
["Number_table_sorting_hidden"] = 3300,
["Numero"] = 3500,
["Nutshell"] = 3900,
["Nw="] = 2300,
["Module:NUMBEROFSECTIONS"] = 4700,
["Module:Namespace_detect"] = 15900000,
["Module:Namespace_detect/config"] = 17000000,
["Module:Namespace_detect/data"] = 17000000,
["Module:National_squad"] = 54000,
["Module:Native_name"] = 91000,
["Module:Navbar"] = 5420000,
["Module:Navbar/configuration"] = 5420000,
["Module:Navbar/styles.css"] = 4770000,
["Module:Navbox"] = 4430000,
["Module:Navbox/configuration"] = 4430000,
["Module:Navbox/styles.css"] = 4430000,
["Module:Navbox_ice_hockey"] = 3100,
["Module:Navbox_top_and_bottom"] = 15000,
["Module:Navbox_with_collapsible_groups"] = 139000,
["Module:Navboxes"] = 55000,
["Module:Navseasoncats"] = 479000,
["Module:Nihongo"] = 104000,
["Module:No_ping"] = 447000,
["Module:Noinclude"] = 734000,
["Module:Ns_has_subpages"] = 2170000,
["Module:Number_table_sorting"] = 37000,
}
39e43b2f7d7c960b9c86edd925fdfb685468d0e6
Module:Message box/ombox.css
828
33
303
66
2023-06-06T08:51:54Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Message_box/ombox.css]]: w
sanitized-css
text/css
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
e2c21da9b2e5ea3a68e2f5a7432cbfd3cfce80a8
Template:Navbox/doc
10
135
305
304
2023-06-06T08:51:56Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Navbox/doc]]: w
wikitext
text/x-wiki
{{for|vertically-aligned navigation|Template:Sidebar}}
{{documentation subpage}}
{{high-use|all-pages=y}}
{{Template display|nomobile}}
{{Lua|Module:Navbox}}
{{Navbox suite}}
{{Lua sidebar}}
This template allows a [[Wikipedia:Navigation template|navigational template]] to be set up relatively quickly by supplying it with one or more lists of links. It comes equipped with default styles that should work for most navigational templates. Changing the default styles is possible, but not recommended. Using this template, or one of its "Navbox suite" sister templates, is highly recommended for standardization of navigational templates, and for ease of use.
{{Navbox visibility}}
== Usage ==
Please remove the parameters that are left blank.
<pre style="overflow: auto;">{{Navbox
| name = {{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}}
| title =
| listclass = hlist
| state = {{{state|}}}
| above =
| image =
| group1 =
| list1 =
| group2 =
| list2 =
| group3 =
| list3 =
<!-- ... -->
| below =
}}
</pre>
== Parameter list ==
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| title = {{{title}}}
| above = {{{above}}}
| image = {{{image}}}
| group1 = {{{group1}}}
| list1 = {{{list1}}}
| group2 = {{{group2}}}
| list2 = {{{list2}}}
| group3 = {{{group3}}}
| list3 = {{{list3}}}
| group4 = {{{group4}}}
| list4 = {{{list4}}}
| below = {{{below}}} <br /> See alternate navbox formats under: [[#Layout of table|''Layout of table'']]
}}
The navbox uses lowercase parameter names, as shown in the box (''above''). The required ''name'' and ''title'' will create a one-line box if other parameters are omitted.
Notice "group1" (etc.) is optional, as are sections named "above/below".
{{clear}}
The basic and most common parameters are as follows (see [[#Parameter descriptions|below]] for the full list):
: <code>name</code> – the name (Wikipedia location) of the template.
: <code>title</code> – text in the title bar, such as: <nowiki>[[Widget stuff]]</nowiki>.
: <code>listclass</code> – a CSS class for the list cells, usually <code>hlist</code> for horizontal lists. Alternatively, use bodyclass for the whole box.
: <code>state</code> – controls when a navbox is expanded or collapsed.
: <code>titlestyle</code> – a CSS style for the title-bar, such as: <code>background: gray;</code>
: <code>groupstyle</code> – a CSS style for the group-cells, such as: <code>background: #eee;</code>
: <code>above</code> – text to appear above the group/list section (could be a list of overall wikilinks).
: <code>image</code> – an optional right-side image, coded as the whole image, such as: <code><nowiki>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</nowiki></code>
:: Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight.
: <code>imageleft</code> – an optional left-side image (code the same as the "image" parameter).
: <code>group<sub>n</sub></code> – the left-side text before list-n (if group-n omitted, list-n extends to the left edge of the box, and defaults to <code>text-align:center</code> styling).
: <code>list<sub>n</sub></code> – text listing wikilinks using a [[Help:List|wikilist]] format.
: <code>below</code> – optional text to appear below the group/list section.
== Parameter descriptions ==
The following is a complete list of parameters for using {{tl|Navbox}}. In most cases, the only required parameters are <code>name</code>, <code>title</code>, and <code>list1</code>, though [[Template:Navbox/doc#Child navboxes|child navboxes]] do not even require those to be set.
{{tl|Navbox}} shares numerous common parameter names with its sister templates, {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}, for consistency and ease of use. Parameters marked with an asterisk (*) are common to all three master templates.
=== Setup parameters ===
; ''name''*
: The name of the template, which is needed for the "V • T • E" ("View • Talk • Edit") links to work properly on all pages where the template is used. You can enter <code><nowiki>{{subst:PAGENAME}}</nowiki></code> for this value as a shortcut. The name parameter is only mandatory if a <code>title</code> is specified, and the <code>border</code> parameter is not set, and the <code>navbar</code> parameter is not used to disable the navbar.
; ''state''* <span style="font-weight:normal;">[<code>autocollapse, collapsed, expanded, plain, off</code>]</span>
:* Defaults to <code>autocollapse</code>. A navbox with <code>autocollapse</code> will start out collapsed if there are two or more collapsible elements on the same page. Otherwise, the navbox will be expanded. For the technically minded, see [[MediaWiki:Common.js]] (search for "autocollapse").
:* If set to <code>collapsed</code>, the navbox will always start out in a collapsed state.
:* If set to <code>expanded</code>, the navbox will always start out in an expanded state.
:* If set to <code>plain</code>, the navbox will always be expanded with no [hide] link on the right, and the title will remain centered (by using padding to offset the <small>V • T • E</small> links).
:* If set to <code>off</code>, the navbox will always be expanded with no [hide] link on the right, but no padding will be used to keep the title centered. This is for advanced use only; the "plain" option should suffice for most applications where the [show]/[hide] button needs to be hidden.
: To show the box when standalone (non-included) but then auto-hide contents when in an article, put "expanded" inside {{tag|noinclude|p}} tags. This setting will force the box to be visible when standalone (even when followed by other boxes), displaying "[hide]", but then it will auto-collapse the box when stacked inside an article: <pre>| state = </nowiki></code>{{tag|noinclude|content=expanded}}</pre> Often times, editors will want a default initial state for a navbox, which may be overridden in an article. Here is the trick to do this:
:* In your intermediate template, create a parameter also named "state" as a pass-through like this: <pre><nowiki>| state = {{{state<includeonly>|your_desired_initial_state</includeonly>}}}</nowiki></pre>
:* The {{tag|includeonly|o}}<code>|</code> will make the template expanded when viewing the template page by itself.
:** Example 1: {{tl|Peso}} with ''autocollapse'' as the default initial state. [[Catalan peseta]] transcludes it and has only one navbox; thus, the peso navbox shows. [[Chilean peso]] has more than two navboxes; thus, the peso navbox collapses.
:** Example 2: {{tl|Historical currencies of Hungary}} with ''expanded'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|expanded</includeonly>}}}</pre> All transcluding articles show the content by default, unless there is a hypothetical article that specifies <code><nowiki>{{templatename|state=collapsed}}</nowiki></code> when transcluding.
:** Example 3: {{tl|Tourism}} with ''collapsed'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|collapsed</includeonly>}}}</pre> All transcluding articles will show the template as collapsed by default, but the template will still be uncollapsed when displayed on its own page.
:* The template {{tl|Collapsible option}} explains how to use the <code>state</code> parameter. It can be added to a {{tag|noinclude|p}} section after the template definition or to the instructions on the {{tl|documentation subpage}}.
; ''navbar''*
: If set to <code>plain</code>, the <span style="font-size: 88%;">V • T • E</span> links on the left side of the titlebar will not be displayed, and padding will be automatically used to keep the title centered. Use <code>off</code> to remove the <span style="font-size: 88%;">V • T • E</span> links, but not apply padding (this is for advanced use only; the "plain" option should suffice for most applications where a navbar is not desired). It is highly recommended that one not hide the navbar, in order to make it easier for users to edit the template, and to keep a standard style across pages.
; ''border''*
: ''See later section on [[#Child navboxes|using navboxes within one another]] for examples and a more complete description.'' If set to <code>child</code> or <code>subgroup</code>, then the navbox can be used as a borderless child that fits snugly in another navbox. The border is hidden and there is no padding on the sides of the table, so it fits into the ''list'' area of its parent navbox. If set to <code>none</code>, then the border is hidden and padding is removed, and the navbox may be used as a child of another container (do not use the <code>none</code> option inside of another navbox; similarly, only use the <code>child</code>/<code>subgroup</code> option inside of another navbox). If set to anything else (default), then a regular navbox is displayed with a 1px border. An alternate way to specify the border to be a subgroup style is like this (i.e. use the first unnamed parameter instead of the named ''border'' parameter):
:<pre>{{Navbox|child|...}}</pre>
=== Cells ===
; ''title''*
: Text that appears centered in the top row of the table. It is usually the template's topic, i.e. a succinct description of the body contents. This should be a single line, but if a second line is needed, use <code><nowiki>{{-}}</nowiki></code> to ensure proper centering. This parameter is technically not mandatory, but using {{tl|Navbox}} is rather pointless without a title.
; ''above''*
: A full-width cell displayed between the titlebar and first group/list, i.e. ''above'' the template's body (groups, lists and image). In a template without an image, ''above'' behaves in the same way as the ''list1'' parameter without the ''group1'' parameter.
; ''group<sub>n</sub>''*
: (i.e. ''group1'', ''group2'', etc.) If specified, text appears in a header cell displayed to the left of ''list<sub>n</sub>''. If omitted, ''list<sub>n</sub>'' uses the full width of the table.
; ''list<sub>n</sub>''*
: (i.e. ''list1'', ''list2'', etc.) The body of the template, usually a list of links. Format is inline, although the text can be entered on separate lines if the entire list is enclosed within <code><nowiki><div> </div></nowiki></code>. At least one ''list'' parameter is required; each additional ''list'' is displayed in a separate row of the table. Each ''list<sub>n</sub>'' may be preceded by a corresponding ''group<sub>n</sub>'' parameter, if provided (see below).
:Entries should be separated using a [[newline]] and an [[asterisk]] (*). If instead two asterisks are used, it provides [[Nesting (computing)|nesting]] within the previous entry by enclosing the entry with brackets. Increasing the number of asterisks used increases the number of brackets around entries.
; ''image''*
: An image to be displayed in a cell below the title and to the right of the body (the groups/lists). For the image to display properly, the ''list1'' parameter must be specified. The ''image'' parameter accepts standard wikicode for displaying an image, ''e.g.'': <pre>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</pre> nb: including "|right" will produce the usual left margin to provide separation from the list items and [[Zebra striping (computer graphics)|zebra striping]].
:Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight. A rare example of a correct usage would be [[special:permalink/995622594|this one]]: a map shows (in green) the location of a region within the state of Kazakhstan, and this is consistently implemented for [[:category:Kazakhstan region templates|all state's regions]].
; ''imageleft''*
: An image to be displayed in a cell below the title and to the left of the body (lists). For the image to display properly, the ''list1'' parameter must be specified and no groups can be specified. It accepts the same sort of parameter that ''image'' accepts.
; ''below''*
: A full-width cell displayed ''below'' the template's body (groups, lists and image). In a template without an image, ''below'' behaves in the same way as the template's final ''list<sub>n</sub>'' parameter without a ''group<sub>n</sub>'' parameter. For an example of the ''below'' parameter in use, see {{oldid|Main Page|352612160|this}} version of {{tl|Lists of the provinces and territories of Canada}}. {{tl|icon}} is often used for non-article links, for example <code><nowiki>{{icon|category}} [[:Category:</nowiki>''name''<nowiki>|Category]]</nowiki></code>.
=== Style parameters ===
Styles are generally advised against, to maintain consistency among templates and pages in Wikipedia; but the option to modify styles is given.
; ''bodystyle''*
: Specifies [[Cascading Style Sheets|CSS]] styles to apply to the template body. This option should be used sparingly as it can lead to visual inconsistencies. Examples:
:* <code>bodystyle = background: #''nnnnnn'';</code>
:* <code>bodystyle = width: ''N'' [em/%/px or width: auto];</code>
:* <code>bodystyle = float: [''left/right/none''];</code>
:* <code>bodystyle = clear: [''right/left/both/none''];</code>
; ''basestyle''*
: CSS styles to apply to the ''title'', ''above'', ''below'', and ''group'' cells all at once. The styles are not applied to ''list'' cells. This is convenient for easily changing the basic color of the navbox without having to repeat the style specifications for the different parts of the navbox. Example: <code>basestyle = background: lightskyblue;</code>
; ''titlestyle''*
: [[Cascading Style Sheets|CSS]] styles to apply to ''title'', most often the titlebar's background color:
:* <code>titlestyle = background: ''#nnnnnn'';</code>
:* <code>titlestyle = background: ''name'';</code>
:* <code>titlestyle = background: none;</code> — for no background color
; ''groupstyle''*
: CSS styles to apply to the ''groupN'' cells. This option overrides any styles that are applied to the entire table. Examples:
:* <code>groupstyle = background: #''nnnnnn'';</code>
:* <code>groupstyle = text-align: [''left/center/right''];</code>
:* <code>groupstyle = vertical-align: [''top/middle/bottom''];</code>
; ''group<sub>n</sub>style''*
: CSS styles to apply to a specific group, in addition to any styles specified by the ''groupstyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>group3style = background: red; color: white;</code>
; ''groupwidth''
: A number and unit specifying a uniform width for the group cells, in cases where little content in the list cells may cause group cells to be too wide. No default. However, may be overridden by the ''group(n)style'' parameter. Example: <code>groupwidth = 9em</code>
; ''liststyle''*
: CSS styles to apply to all lists. Overruled by the ''oddstyle'' and ''evenstyle'' parameters (if specified) hereafter. When using backgound colors in the navbox, see the [[#Intricacies|note hereafter]].
; ''list<sub>n</sub>style''*
: CSS styles to apply to a specific list, in addition to any styles specified by the ''liststyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>list5style = background: #ddddff;</code>
; ''listpadding''*
: A number and unit specifying the padding in each ''list'' cell. The ''list'' cells come equipped with a default padding of 0.25em on the left and right, and 0 on the top and bottom. Due to complex technical reasons, simply setting "liststyle = padding: 0.5em;" (or any other padding setting) will not work. Examples:
:* <code>listpadding = 0.5em 0;</code> (sets 0.5em padding for the top/bottom, and 0 padding for the left/right.)
:* <code>listpadding = 0;</code> (removes all list padding.)
; ''oddstyle''
; ''evenstyle''
: Applies to odd/even list numbers. Overrules styles defined by ''liststyle''. The default behavior is to add striped colors (white and gray) to odd/even rows, respectively, in order to improve readability. These should not be changed except in extraordinary circumstances.
; ''evenodd'' <span style="font-weight: normal;"><code>[swap, even, odd, off]</code></span>
: If set to <code>swap</code>, then the automatic striping of even and odd rows is reversed. Normally, even rows get a light gray background for striping; when this parameter is used, the odd rows receive the gray striping instead of the even rows. Setting to <code>even</code> or <code>odd</code> sets all rows to have that striping color. Setting to <code>off</code> disables automatic row striping.
; ''abovestyle''*
; ''belowstyle''*
: CSS styles to apply to the top cell (specified via the ''above'' parameter) and bottom cell (specified via the ''below'' parameter). Typically used to set background color or text alignment:
:* <code>abovestyle = background: #''nnnnnn'';</code>
:* <code>abovestyle = text-align: [''left/center/right''];</code>
:* <code>belowstyle = background: #''nnnnnn'';</code>
:* <code>belowstyle = text-align: [''left/center/right''];</code>
; ''imagestyle''*
; ''imageleftstyle''*
: CSS styles to apply to the cells where the image/imageleft sits. These styles should only be used in exceptional circumstances, usually to fix width problems if the width of groups is set and the width of the image cell grows too large. Example: <code>imagestyle = width:5em;</code>
===== Default styles =====
The style settings listed here are those that editors using the navbox change most often. The other more complex style settings were left out of this list to keep it simple. Most styles are set in [[MediaWiki:Common.css]].
<syntaxhighlight lang="css">
bodystyle = background: #fdfdfd; width: 100%; vertical-align: middle;
titlestyle = background: #ccccff; padding-left: 1em; padding-right: 1em; text-align: center;
abovestyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center;
belowstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center;
groupstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: right;
liststyle = background: transparent; text-align: left/center;
oddstyle = background: transparent;
evenstyle = background: #f7f7f7;
</syntaxhighlight>
Since ''liststyle'' and ''oddstyle'' are transparent, odd lists have the color of the ''bodystyle'', which defaults to #fdfdfd (white with a hint of gray). A list defaults to <code>text-align: left;</code> if it has a group, if not it defaults to <code>text-align: center;</code>. Since only ''bodystyle'' has a vertical-align all the others inherit its <code>vertical-align: middle;</code>.
=== Advanced parameters ===
; ''bodyclass''
; ''aboveclass''
; ''groupclass''
; ''listclass''
; ''belowclass''
: This enables attaching a CSS class to group or list cells. The most common use for ''listclass'' is to give it the <code>hlist</code> class that will cause lists to render horizontally. All these parameters accept the <code>hlist</code> class, but if more than one parameter is used for <code>hlist</code>, use {{para|bodyclass|hlist}} instead.
; ''titlegroup''
: This puts a group in the title area, with the same default styles as ''group<sub>n</sub>''. It should be used only in exceptional circumstances (usually advanced meta-templates) and its use requires some knowledge of the internal code of {{tl|Navbox}}; you should be ready to manually set up CSS styles to get everything to work properly if you wish to use it. If you think you have an application for this parameter, it might be best to change your mind, or consult the talk page first.
; ''titlegroupstyle''
: The styles for the titlegroup cell.
; ''innerstyle''
: A very advanced parameter to be used ''only'' for advanced meta-templates employing the navbox. Internally, the navbox uses an outer table to draw the border, and then an inner table for everything else (title/above/groups/lists/below/images, etc.). The ''style''/''bodystyle'' parameter sets the style for the outer table, which the inner table inherits, but in advanced cases (meta-templates) it may be necessary to directly set the style for the inner table. This parameter provides access to that inner table so styles can be applied. Use at your own risk.
; ''nowrapitems''
: Setting <code>|nowrapitems=yes</code> applies nowrap to each line in a list item, and to any <code>above</code> or <code>below</code> item.
; ''orphan''
: Setting <code>|orphan=yes</code> in a child navbox fixes odd/even striping and removes [[:Category:Navbox orphans]].
==== Microformats ====
; ''bodyclass''
: This parameter is inserted into the "class" attribute for the navbox as a whole.
; ''titleclass''
: This parameter is inserted into the "class" attribute for the navbox's title caption.
This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. To flag a navbox as containing [[hCard]] information about a person, for example, add the following parameter:
<pre>
| bodyclass = vcard
</pre>
''and''
<pre>
| titleclass = fn
</pre>
''or'' (for example):
<pre><nowiki>
| title = The books of <span class="fn">[[Iain Banks]]</span>
</nowiki></pre>
...and so forth.
See [[Wikipedia:WikiProject Microformats]] for more information on adding microformat information to Wikipedia, and [[microformat]] for more information on microformats in general.
== Layout of table ==
===Without image, above and below===
Table generated by {{tl|Navbox}} '''without''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only):
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| liststyle = background: silver;
| title = {{{title}}}
| group1 = {{{group1}}}
| list1 = {{{list1}}}
| group2 = {{{group2}}}
| list2 = {{{list2}}}
| list3 = {{{list3}}} ''without {{{group3}}}''
| group4 = {{{group4}}}
| list4 = {{{list4}}}
}}
===With image, above and below===
Table generated by {{tl|Navbox}} '''with''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only):
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| liststyle = background: silver;
| image = {{{image}}}
| title = {{{title}}}
| above = {{{above}}}
| group1 = {{{group1}}}
| list1 = {{{list1}}}
| group2 = {{{group2}}}
| list2 = {{{list2}}}
| list3 = {{{list3}}} ''without {{{group3}}}''
| group4 = {{{group4}}}
| list4 = {{{list4}}}
| below = {{{below}}}
}}
===With image and without groups===
Table generated by {{tl|Navbox}} '''with''' ''image'', ''imageleft'', ''lists'', and '''without''' ''groups'', ''above'', ''below'' (gray list background color added for illustration only):
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| liststyle = background: silver;
| image = {{{image}}}
| imageleft = {{{imageleft}}}
| title = {{{title}}}
| list1 = {{{list1}}}
| list2 = {{{list2}}}
| list3 = {{{list3}}}
| list4 = {{{list4}}}
}}
== Examples ==
<!-- Please do not encourage folks to use <div> within Navboxes as (unless handled carefully) they can negate liststyles/groupstyles/etc. settings. -->
=== No image ===
<syntaxhighlight lang="wikitext" style="overflow: auto;">
{{Navbox
| name = Navbox/doc
| title = [[MSC Malaysia]]
| listclass = hlist
| group1 = Centre
| list1 =
* [[Cyberjaya]]
| group2 = Area
| list2 =
* [[Klang Valley]]
| group3 = Major landmarks
| list3 =
* [[Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
* [[Technology Park Malaysia]]
* [[Putrajaya]]
* [[Cyberjaya]]
* [[Kuala Lumpur International Airport]]
| group4 = Infrastructure
| list4 =
* [[Express Rail Link]]
* [[KL-KLIA Dedicated Expressway]]
| group5 = Prime applications
| list5 =
* [[E-Government]]
* [[MyKad]]
}}
</syntaxhighlight>
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| title = [[MSC Malaysia]]
| listclass = hlist
| group1 = Centre
| list1 =
* [[Cyberjaya]]
| group2 = Area
| list2 =
* [[Klang Valley]]
| group3 = Major landmarks
| list3 =
* [[Petronas Twin Towers]]
* [[Kuala Lumpur Tower]]
* [[Kuala Lumpur Sentral]]
* [[Technology Park Malaysia]]
* [[Putrajaya]]
* [[Cyberjaya]]
* [[Kuala Lumpur International Airport]]
| group4 = Infrastructure
| list4 =
* [[Express Rail Link]]
* [[KL-KLIA Dedicated Expressway]]
| group5 = Prime applications
| list5 =
* [[E-Government]]
* [[MyKad]]
}}
== Child navboxes ==
{{Selfref|For additional examples, see the [[Template:Navbox/testcases|Navbox testcases page]].}}
It is possible to place multiple navboxes within a single border by using "child" as the first parameter, or by setting the ''border'' parameter. The basic code for doing this is as follows (which adds a subgroup for the first group/list area):
<pre style="overflow: auto;">
{{Navbox
| name = {{subst:PAGENAME}}
| title = Title
| group1 = [optional]
| list1 = {{Navbox|child
...child navbox parameters...
}}
...
}}
</pre>
=== Subgroups example ===
This example shows two subgroups created using <code>child</code> as the first unnamed parameter. The striping is alternated automatically. To remove the striping altogether, you can set <code>liststyle = background:transparent;</code> in each of the navboxes.
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| state = uncollapsed
| title = Multiple subgroup example
| above = Above
| below = Below
| group1 = Group1
| list1 = List1
| group2 = Group2
| list2 =
{{{{PAGENAMETDOC}}|child
| group1 = Group2.1
| list1 = List1
| group2 = Group2.2
| list2 = List2
| group3 = Group2.3
| list3 = List3
}}
| group3 = Group3
| list3 = List3
| group4 = Group4
| list4 =
{{{{PAGENAMETDOC}}|child
| group1 = Group4.1
| list1 = List1
| group2 = Group4.2
| list2 = List2
| group3 = Group4.3
| list3 = List3
}}
}}
=== Multiple show/hides in a single container ===
{{main|Template:Navbox with collapsible groups}}
The example below is generated using a regular navbox for the main container, then its list1, list2, and list3 parameters each contain another navbox, with <code>1 = child</code> set. The view (v), talk (t), edit (e) navbar links are hidden using <code>navbar = plain</code> for each of them, or could be suppressed by just leaving out the ''name'' parameter (child navboxes do not require the name parameter to be set, unlike regular navboxes).
{{{{PAGENAMETDOC}}
| name = Navbox/doc
| title = [[French colonial empire|Former French overseas empire]]
| state = uncollapsed
| list1 = {{{{PAGENAMETDOC}}|child
| navbar = plain
| title = [[French colonial empire|Former French colonies]] in [[Africa]] and the [[Indian Ocean]]
| listclass = hlist
| group1 = [[Mahgreb]]
| list1 =
* [[French rule in Algeria|Algeria]]
* [[French Morocco|Morocco]] <small>([[Arguin|Arguin Island]])</small>
* [[History of Tunisia|Tunisia]]
| group2 = [[French West Africa]]
| list2 =
* [[History of Côte d'Ivoire#French Period|Côte d'Ivoire]]
* [[French Dahomey|Dahomey]]
* [[French Sudan]]
* [[French Guinea|Guinea]]
* [[History of Mauritania#French colonization and post-colonial history|Mauritania]]
* [[History of Niger#Colonization|Niger]]
* [[History of Senegal|Senegal]]
* [[French Upper Volta|Upper Volta]]
* [[French Togoland]]
* [[James Island (The Gambia)|James Island]]
| group3 = [[French Equatorial Africa]]
| list3 =
* [[Colonial Chad|Chad]]
* [[History of Gabon|Gabon]]
* [[History of the Republic of the Congo|Middle Congo]]
* [[Oubangui-Chari]]
| group4 = [[Comoros]]
| list4 =
* [[Anjouan]]
* [[Grande Comore]]
* [[Mohéli]]
* [[History of Djibouti#French Interest|French Somaliland (Djibouti)]]
* [[History of Madagascar#French control|Madagascar]]
* [[Mauritius|Ile de France]]
* [[Seychelles]]
}}
| list2 = {{{{PAGENAMETDOC}}|child
| navbar = plain
| title = [[French colonial empire|Former French colonies]] in the [[Americas]]
| listclass = hlist
| list1 =
* [[New France]]{{spaces|2}}<small>([[Acadia]], [[Louisiana (New France)|Louisiana]], [[Canada, New France|Canada]], [[Newfoundland (island)|Terre Neuve]]) 1655–1763 </small>
| list2 =
* [[Inini]]
* [[Berbice]]
* [[Saint-Domingue]]
* <small>[[Haiti]]</small>
* [[Tobago]]
* [[History of the British Virgin Islands|Virgin Islands]]
* [[France Antarctique]]
* [[France Équinoxiale]]
| below = [[French West India Company]]
}}
| list3 = {{{{PAGENAMETDOC}}|child
| navbar = plain
| title = [[French colonial empire|Former French colonies]] in [[Asia]] and [[Oceania]]
| listclass = hlist
| group1 = [[French India]]
| list1 =
* [[Chandernagor]]
* [[Coromandel Coast]]
* [[History of Chennai|Madras]]
* [[Mahé, India|Mahé]]
* [[History of Pondicherry|Pondichéry]]
* [[Karaikal]]
* [[Yanam (India)|Yanaon]]
| group2 = [[French Indochina]]
| list2 =
* [[Colonial Cambodia|Cambodia]]
* [[History of Laos to 1945#French Laos|Laos]]
* [[French Indochina|Vietnam]] <small>([[Annam (French colony)|Annam]], [[Cochinchina]], [[Tonkin]])</small>
| group3 = Other Asian
| list3 =
* [[Alawite State|Alaouites]]
* [[Republic of Hatay|Alexandretta-Hatay]]
* [[Sri Lanka|Ceylon]]
* [[Kwangchowan]]
| group4 = [[Oceania]]
| list4 =
* [[New Hebrides]]
** [[History of Vanuatu|Vanuatu]]
| below = [[French East India Company]]
}}
}}
== Relationship with other Navbox templates ==
This navbox template works in conjunction with two other templates: {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}. All three of these templates share common parameters for consistency and ease of use (such parameters are marked with an asterisk (*) in the [[#Parameter descriptions|parameter descriptions]] list hereinbefore). Most importantly, each template can be used as a child of one another (by using the {{para|border|child}} parameter, or by specifying the first unnamed parameter to be <code>child</code>. For example: <code><nowiki>{{Navbox|child ...}}</nowiki></code>, <code><nowiki>{{Navbox with columns|child ...}}</nowiki></code> or <code><nowiki>{{Navbox with collapsible groups|child ...}}</nowiki></code>.)
== Technical details ==
* The {{navbar|1=:{{FULLPAGENAME}}|mini=on}} links are produced by [[Template:Navbar]]. If you have a question about them, it is probably best to ask at [[Template talk:Navbar]].
* The 2px wide border between groups and lists is drawn using the border-left property of the list cell. Thus, if you wish to change the background color of the template (for example <code>bodystyle = background:purple;</code>), then you'll need to make the border-left-color match the background color (i.e. <code>liststyle = border-left-color: purple;</code>). If you wish to have a border around each list cell, then the 2px border between the list cells and group cells will disappear; you'll have to come up with your own solution.
* Adjacent navboxes have only a 1 pixel border between them. If you set the top or bottom margin of <code>style/bodystyle</code>, then this will not work.
* The default margin-left and margin-right of the outer navbox table are set to "auto;". If you wish to use navbox as a float, you need to manually set the margin-left and margin-right values, because the auto margins interfere with the float option. For example, add the following code to use the navbox as a float:
** <code>bodystyle = width: 22em; float: right; margin-left: 1em; margin-right: 0;</code>
=== Copying to other projects or wikis ===
If you are trying to copy {{tlf|Navbox}} to your local wiki, there are several other things that must be installed or copied over as well:
* The [[mw:Extension:Scribunto|Scribunto]] and [[:mw:Extension:TemplateStyles|TemplateStyles]] extensions must be installed.
* [[Module:Navbox]] and its module and TemplateStyles dependencies, listed in the above two links
* Optionally, the <code>Add support to mw-collapsible for autocollapse, innercollapse and outercollapse</code> script from [[MediaWiki:Common.js]] may be copied, if autocollapsing is desired.
== TemplateData ==
{{TemplateDataHeader}}
<templatedata>
{
"params": {
"state": {
"label": "State",
"description": "Controls when a navbox is expanded or collapsed",
"example": "autocollapse",
"suggestedvalues": [
"autocollapse",
"collapsed",
"expanded",
"plain",
"off"
],
"default": "autocollapse",
"suggested": true
},
"title": {
"label": "Title",
"description": "Text in the title bar; centered in the top row of the table. Usually the template's topic.",
"example": "[[Widget stuff]]",
"suggested": true
},
"above": {
"label": "Above",
"description": "Full-width cell displayed between the titlebar and first group/list, i.e. above the template's body (groups, lists and image)",
"type": "string",
"suggested": true
},
"image": {
"label": "Image",
"description": "Image to be displayed in a cell below the title and to the right of the body",
"example": "[[File:XX.jpg | 80px | link= | alt= ]]",
"type": "wiki-file-name",
"suggested": true
},
"group1": {
"label": "Group 1",
"description": "If specified, text appears in a header cell displayed to the left of list 1. If omitted, list 1 uses the full width of the table.",
"suggested": true
},
"list1": {
"label": "List 1",
"description": "Body of the template; usually a list of links. Format is inline. At least one list parameter is required; each additional list is displayed in a separate row of the table. Each listn may be preceded by a corresponding groupn parameter.\nEntries should be separated using a newline and an asterisk. If two asterisks are used, it provides nesting within the previous entry with brackets.",
"required": true,
"suggested": true
},
"group2": {
"suggested": true
},
"list2": {
"suggested": true
},
"list3": {
"suggested": true
},
"group3": {
"suggested": true
},
"group4": {},
"list4": {},
"below": {
"label": "Below",
"description": "Full-width cell displayed below the template's body.",
"suggested": true
},
"imageleft": {
"label": "Image left",
"description": "Image to be displayed in a cell below the title and to the left of the body. For the image to display properly, list1 parameter must be specified and no groups can be specified.",
"example": "[[File:XX.jpg | 80px | link= | alt= ]]",
"type": "wiki-file-name"
},
"name": {
"label": "Name",
"description": "The name of the template. Needed for \"View • Talk • Edit\" links to work properly.",
"type": "string",
"default": "{{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}}",
"suggested": true
},
"listclass": {
"label": "List class",
"description": "CSS class for the list cells, usually hlist for horizontal lists. Alternatively, use bodyclass for the whole box.",
"example": "hlist",
"type": "string"
},
"navbar": {
"label": "Navbar status",
"example": "plain, off",
"type": "string"
},
"border": {
"label": "Border status",
"example": "child, subgroup, none",
"type": "string"
},
"bodystyle": {},
"basestyle": {},
"titlestyle": {},
"groupstyle": {},
"group1style": {},
"groupwidth": {},
"liststyle": {},
"list1style": {},
"listpadding": {},
"oddstyle": {},
"evenstyle": {},
"evenodd": {
"suggestedvalues": [
"swap",
"even",
"odd",
"off"
]
},
"abovestyle": {},
"belowstyle": {},
"imagestyle": {},
"imageleftstyle": {}
},
"description": "Creates a navigational box for links to other pages. \nDoes not display in mobile.",
"paramOrder": [
"name",
"title",
"group1",
"list1",
"listclass",
"state",
"above",
"below",
"image",
"group2",
"list2",
"group3",
"list3",
"group4",
"list4",
"imageleft",
"navbar",
"border",
"bodystyle",
"basestyle",
"titlestyle",
"groupstyle",
"liststyle",
"group1style",
"list1style",
"groupwidth",
"listpadding",
"oddstyle",
"evenstyle",
"evenodd",
"abovestyle",
"belowstyle",
"imagestyle",
"imageleftstyle"
]
}
</templatedata>
== See also ==
* {{tl|Navboxes}} — groups several navigation boxes together.
* {{tl|Nobold}} — To display text at normal font-weight within a context where the default font-weight is bold, e.g. header cells in tables.
* {{tl|Sidebar}} — Vertically-aligned navigation templates.
* [[Template:Navbox/testcases]] — For additional examples of template code.
* [[Wikipedia:Line-break handling]] — The how-to guide about how to handle word wraps (line breaks) on Wikipedia, such as the wrapping of the link lists used in navboxes.
* [[Wikipedia:Template documentation]] — Guideline to creating the accompanying documentation
* {{tl|Nowrap begin}}, {{tl|·}} and {{tl|•}} are '''deprecated''' in favor of the <code>hlist</code> class for formatting lists. See [[Template:Flatlist#Technical details|Flatlist]] for a technical explanation of how <code>hlist</code> works.
=== Tracking categories ===
* {{clc|Navbox orphans}}
* {{clc|Navigational boxes without horizontal lists}}
* {{clc|Navboxes using background colours}}
* {{clc|Potentially illegible navboxes}}
* {{clc|Navboxes using borders}}
{{Navigation templates}}
<includeonly>{{sandbox other||
<!-- Add categories below this line, and interwikis at Wikidata -->
[[Category:Navigational boxes| ]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Wikipedia metatemplates]]
[[Category:Collapse templates]]
}}</includeonly>
9063bd1d64f66910446323fd0f80c3a65eea6e20
Template:Plainlist/styles.css
10
39
307
78
2023-06-06T08:51:56Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Plainlist/styles.css]]: w
sanitized-css
text/css
/**
* Unbulleted lists
*/
.plainlist ul {
line-height: inherit;
list-style: none none;
margin: 0;
}
.plainlist ul li {
margin-bottom: 0;
}
7243fd4329145928d2b4b02fc42513ab65934318
Template:Hlist/styles.css
10
136
309
308
2023-06-06T08:51:57Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Hlist/styles.css]]: w
sanitized-css
text/css
/* {{pp-protected|reason=match parent|small=yes}} */
/*
* hlist styles are defined in core and Minerva and differ in Minerva. The
* current definitions here (2023-01-01) are sufficient to override Minerva
* without use of the hlist-separated class. The most problematic styles were
* related to margin, padding, and the bullet. Check files listed at
* [[MediaWiki talk:Common.css/to do#hlist-separated]]
*/
/*
* TODO: When the majority of readership supports it (or some beautiful world
* in which grade C support is above the minimum threshold), use :is()
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
/*
* don't trust the note that says margin doesn't work with inline
* removing margin: 0 makes dds have margins again
* We also want to reset margin-right in Minerva
*/
margin: 0;
display: inline;
}
/* Display requested top-level lists inline */
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
/* Display nested lists inline */
.hlist dl dl,
.hlist dl ol,
.hlist dl ul,
.hlist ol dl,
.hlist ol ol,
.hlist ol ul,
.hlist ul dl,
.hlist ul ol,
.hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li {
display: none;
}
/* TODO: :not() can maybe be used here to remove the later rule. naive test
* seems to work. more testing needed. like so:
*.hlist dt:not(:last-child)::after {
* content: ": ";
*}
*.hlist dd:not(:last-child)::after,
*.hlist li:not(:last-child)::after {
* content: " · ";
* font-weight: bold;
*}
*/
/* Generate interpuncts */
.hlist dt::after {
content: ": ";
}
.hlist dd::after,
.hlist li::after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child::after,
.hlist dt:last-child::after,
.hlist li:last-child::after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child::before,
.hlist dd dt:first-child::before,
.hlist dd li:first-child::before,
.hlist dt dd:first-child::before,
.hlist dt dt:first-child::before,
.hlist dt li:first-child::before,
.hlist li dd:first-child::before,
.hlist li dt:first-child::before,
.hlist li li:first-child::before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child::after,
.hlist dd dt:last-child::after,
.hlist dd li:last-child::after,
.hlist dt dd:last-child::after,
.hlist dt dt:last-child::after,
.hlist dt li:last-child::after,
.hlist li dd:last-child::after,
.hlist li dt:last-child::after,
.hlist li li:last-child::after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li::before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child::before,
.hlist dt ol > li:first-child::before,
.hlist li ol > li:first-child::before {
content: " (" counter(listitem) "\a0";
}
8c9dd9c9c00f30eead17fe10f51d183333e81f33
Template:Dated maintenance category (articles)
10
137
311
310
2023-06-06T08:51:58Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Dated_maintenance_category_(articles)]]: w
wikitext
text/x-wiki
{{Dated maintenance category
|onlyarticles=yes
|1={{{1|}}}
|2={{{2|}}}
|3={{{3|}}}
|4={{{4|}}}
|5={{{5|}}}
}}<noinclude>
{{documentation|Template:Dated maintenance category/doc}}
</noinclude>
6bbc57c75cc28708a0e71dd658224d5945d80d68
Template:Kns characters
10
138
312
2023-06-06T08:57:04Z
Otonashi Ayana
2
Created page with "{{Navbox | name = Characters kns | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Fac..."
wikitext
text/x-wiki
{{Navbox
| name = Characters kns
| title = {{kns}}
| state = uncollapsed
| listclass = hlist
| group1 = Detectives
| list1 =
* [[Reiji Tokisaka]]
* [[Uozumi Kyozo]]
* [[Shugo Takashiro]]
* [[Ryoichi Yaginuma]]
| group2 = Students
| list2 =
* [[Yukari Tokisaka]]
* [[Toko Kuchiki]]
* [[Toko Mizuhara]]
* [[Tsuzuriko Yosomiya]]
* [[Orihime Tsukishima]]
* [[Ayumu Sato]]
* [[Yui Nishizono]]
* [[Kei Koizumi]]
* [[Yumi Takagawa]]
| group3 = Faculty
| list3 =
* [[Tokio Saeki]]
* [[Nene Akazaki]]
* [[Tatsuhiko Kusaka]]
| group4 = Hospital Staff
| list4 =
* [[Yasutada Kuchiki]]
* [[Koharu Yamanouchi]]
* [[Naoki Murase]]
* [[Tamaki Saito]]
| list5 =
* [[Kyoko Hazuki]]
* [[Hatsune Amemiya]]
* [[Natsume Takashiro]]
* [[Kazuna Takashiro]]
* [[Yukiko Mamiya]]
* [[Shinzo Mamiya]]
* [[Stella]]
* [[Chizuru Kuchiki]]
* [[Fumiya Kuchiki]]
* [[Shin Katsuragi]]
}}
a2c019756064994593e82f0c338638cb1eae9b22
317
312
2023-06-06T09:08:31Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Template:Characters kns]] to [[Template:Kns characters]] without leaving a redirect
wikitext
text/x-wiki
{{Navbox
| name = Characters kns
| title = {{kns}}
| state = uncollapsed
| listclass = hlist
| group1 = Detectives
| list1 =
* [[Reiji Tokisaka]]
* [[Uozumi Kyozo]]
* [[Shugo Takashiro]]
* [[Ryoichi Yaginuma]]
| group2 = Students
| list2 =
* [[Yukari Tokisaka]]
* [[Toko Kuchiki]]
* [[Toko Mizuhara]]
* [[Tsuzuriko Yosomiya]]
* [[Orihime Tsukishima]]
* [[Ayumu Sato]]
* [[Yui Nishizono]]
* [[Kei Koizumi]]
* [[Yumi Takagawa]]
| group3 = Faculty
| list3 =
* [[Tokio Saeki]]
* [[Nene Akazaki]]
* [[Tatsuhiko Kusaka]]
| group4 = Hospital Staff
| list4 =
* [[Yasutada Kuchiki]]
* [[Koharu Yamanouchi]]
* [[Naoki Murase]]
* [[Tamaki Saito]]
| list5 =
* [[Kyoko Hazuki]]
* [[Hatsune Amemiya]]
* [[Natsume Takashiro]]
* [[Kazuna Takashiro]]
* [[Yukiko Mamiya]]
* [[Shinzo Mamiya]]
* [[Stella]]
* [[Chizuru Kuchiki]]
* [[Fumiya Kuchiki]]
* [[Shin Katsuragi]]
}}
a2c019756064994593e82f0c338638cb1eae9b22
318
317
2023-06-06T09:08:53Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}}
| state = uncollapsed
| listclass = hlist
| group1 = Detectives
| list1 =
* [[Reiji Tokisaka]]
* [[Uozumi Kyozo]]
* [[Shugo Takashiro]]
* [[Ryoichi Yaginuma]]
| group2 = Students
| list2 =
* [[Yukari Tokisaka]]
* [[Toko Kuchiki]]
* [[Toko Mizuhara]]
* [[Tsuzuriko Yosomiya]]
* [[Orihime Tsukishima]]
* [[Ayumu Sato]]
* [[Yui Nishizono]]
* [[Kei Koizumi]]
* [[Yumi Takagawa]]
| group3 = Faculty
| list3 =
* [[Tokio Saeki]]
* [[Nene Akazaki]]
* [[Tatsuhiko Kusaka]]
| group4 = Hospital Staff
| list4 =
* [[Yasutada Kuchiki]]
* [[Koharu Yamanouchi]]
* [[Naoki Murase]]
* [[Tamaki Saito]]
| list5 =
* [[Kyoko Hazuki]]
* [[Hatsune Amemiya]]
* [[Natsume Takashiro]]
* [[Kazuna Takashiro]]
* [[Yukiko Mamiya]]
* [[Shinzo Mamiya]]
* [[Stella]]
* [[Chizuru Kuchiki]]
* [[Fumiya Kuchiki]]
* [[Shin Katsuragi]]
}}
4615feb484b19229ab65ba521e17b75abf523503
320
318
2023-06-06T09:11:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}}
| state = uncollapsed
| listclass = hlist
| group1 = Detectives
| list1 =
* [[Reiji Tokisaka]]
* [[Uozumi Kyozo]]
* [[Shugo Takashiro]]
* [[Ryoichi Yaginuma]]
| group2 = Students
| list2 =
* [[Yukari Tokisaka]]
* [[Toko Kuchiki]]
* [[Toko Mizuhara]]
* [[Tsuzuriko Yosomiya]]
* [[Orihime Tsukishima]]
* [[Ayumu Sato]]
* [[Yui Nishizono]]
* [[Kei Koizumi]]
* [[Yumi Takagawa]]
| group3 = Faculty
| list3 =
* [[Tokio Saeki]]
* [[Nene Akazaki]]
* [[Tatsuhiko Kusaka]]
| group4 = Hospital Staff
| list4 =
* [[Yasutada Kuchiki]]
* [[Koharu Yamanouchi]]
* [[Naoki Murase]]
* [[Tamaki Saito]]
| list5 =
* [[Kyoko Hazuki]]
* [[Hatsune Amemiya]]
* [[Natsume Takashiro]]
* [[Kazuna Takashiro]]
* [[Yukiko Mamiya]]
* [[Shinzo Mamiya]]
* [[Stella]]
* [[Chizuru Kuchiki]]
* [[Fumiya Kuchiki]]
* [[Shin Katsuragi]]
}}
[[Category:Kara no Shōjo]]
54e909999120fcdf9fc79fac4ab1aab443788997
321
320
2023-06-06T09:12:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}}
| state = uncollapsed
| listclass = hlist
| group1 = Detectives
| list1 =
* [[Reiji Tokisaka]]
* [[Uozumi Kyozo]]
* [[Shugo Takashiro]]
* [[Ryoichi Yaginuma]]
| group2 = Students
| list2 =
* [[Yukari Tokisaka]]
* [[Toko Kuchiki]]
* [[Toko Mizuhara]]
* [[Tsuzuriko Yosomiya]]
* [[Orihime Tsukishima]]
* [[Ayumu Sato]]
* [[Yui Nishizono]]
* [[Kei Koizumi]]
* [[Yumi Takagawa]]
| group3 = Faculty
| list3 =
* [[Tokio Saeki]]
* [[Nene Akazaki]]
* [[Tatsuhiko Kusaka]]
| group4 = Hospital Staff
| list4 =
* [[Yasutada Kuchiki]]
* [[Koharu Yamanouchi]]
* [[Naoki Murase]]
* [[Tamaki Saito]]
| list5 =
* [[Kyoko Hazuki]]
* [[Hatsune Amemiya]]
* [[Natsume Takashiro]]
* [[Kazuna Takashiro]]
* [[Yukiko Mamiya]]
* [[Shinzo Mamiya]]
* [[Stella]]
* [[Chizuru Kuchiki]]
* [[Fumiya Kuchiki]]
* [[Shin Katsuragi]]
}}
<includeonly>[[Category:Kara no Shōjo]]</includeonly>
921184f23105967edb9e76572cfb63d6bbff1da3
322
321
2023-06-06T09:13:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}}
| state = uncollapsed
| listclass = hlist
| group1 = Detectives
| list1 =
* [[Reiji Tokisaka]]
* [[Uozumi Kyozo]]
* [[Shugo Takashiro]]
* [[Ryoichi Yaginuma]]
| group2 = Students
| list2 =
* [[Yukari Tokisaka]]
* [[Toko Kuchiki]]
* [[Toko Mizuhara]]
* [[Tsuzuriko Yosomiya]]
* [[Orihime Tsukishima]]
* [[Ayumu Sato]]
* [[Yui Nishizono]]
* [[Kei Koizumi]]
* [[Yumi Takagawa]]
| group3 = Faculty
| list3 =
* [[Tokio Saeki]]
* [[Nene Akazaki]]
* [[Tatsuhiko Kusaka]]
| group4 = Hospital Staff
| list4 =
* [[Yasutada Kuchiki]]
* [[Koharu Yamanouchi]]
* [[Naoki Murase]]
* [[Tamaki Saito]]
| list5 =
* [[Kyoko Hazuki]]
* [[Hatsune Amemiya]]
* [[Natsume Takashiro]]
* [[Kazuna Takashiro]]
* [[Yukiko Mamiya]]
* [[Shinzo Mamiya]]
* [[Stella]]
* [[Chizuru Kuchiki]]
* [[Fumiya Kuchiki]]
* [[Shin Katsuragi]]
}}
<includeonly>
[[Category:Kara no Shōjo]]
[[Category:Characters]]
</includeonly>
021d62313a6765a0fe5cfde4b92470ee07e1bb77
Template:Infobox character
10
2
313
86
2023-06-06T08:59:00Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
<pre>
{{infobox character
| name = {{PAGENAME}}
| jname =
| image =
| aka =
| gender =
| age =
| appearance =
| seiyu =
| relations =
}}</pre>
20b530ca6ad53f9d550d34cf704cc5ee81b4297d
314
313
2023-06-06T09:05:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
<pre>
{{infobox character
| name = {{PAGENAME}}
| jname =
| image =
| aka =
| gender =
| age =
| appearance =
| seiyu =
| relations =
}}</pre>
b0087bbca8c030db9129e843cbaaf9d27051b9bf
Reiji Tokisaka
0
42
315
87
2023-06-06T09:06:35Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname =
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
1a1a6bb58a0930cc6e665df47dca2dcff390bbfd
316
315
2023-06-06T09:08:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname =
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
{{characters kns}}
7e56a8d8e021dc939e4fc5dce56110c0d05c52c0
319
316
2023-06-06T09:08:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname =
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
{{kns characters}}
7cf959cfc7fc53802c4a20f7e1033a795331b9a0
Category:Kara no Shōjo
14
139
323
2023-06-06T09:13:50Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Category:Characters
14
140
324
2023-06-06T09:14:16Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Shugo Takashiro
0
62
325
124
2023-06-06T09:14:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name = {{PAGENAME}}
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations = {{plainlist|
* {{spoiler|[[Kazuna Kozuki]] (love interest)}}
* [[Kazuna Takashiro]] (wife)
}}
}}
{{kns characters}}
6cb0c5a29446e7fd3b56f548ed0be1fb7272a688
326
325
2023-06-06T09:15:14Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations = {{plainlist|
* {{spoiler|[[Kazuna Kozuki]] (love interest)}}
* [[Kazuna Takashiro]] (wife)
}}
}}
{{kns characters}}
c41e65daf59aa23d82db02fc612bf3d9dd5e48b6
Template:Nowrap
10
141
328
327
2023-06-06T09:16:20Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Nowrap]]: w
wikitext
text/x-wiki
<span class="nowrap">{{{1}}}</span><noinclude>
{{documentation}}
<!-- Categories go on the /doc page; interwikis go to Wikidata. -->
</noinclude>
5d0dc6b6d89b37f4356242404f46138a4017f015
Template:Tlx
10
35
330
70
2023-06-06T09:16:24Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tlx]]: w
wikitext
text/x-wiki
<onlyinclude><!--
--><templatestyles src="Template:Mono/styles.css"/><!--
-->{{#if:{{yesno|{{{nowrap|}}}}}<!--
-->|<templatestyles src="Template:Nowrap/styles.css"/><!--
-->}}<span class="
monospaced
{{#if:{{yesno|{{{nowrap|}}}}}|nowrap}}
"><!--
-->{{((}}<!--
--><noinclude>[[Template:Tlx|tlx]]</noinclude><!--
--><includeonly>[[{{#if:{{{SISTER|}}}|{{{SISTER}}}Template|{{ns:10}}}}:{{{1}}}|{{{1}}}]]</includeonly><!--
-->{{#if:{{{2|}}}|{{!}}{{{2}}}}}<!--
-->{{#if:{{{3|}}}|{{!}}{{{3}}}}}<!--
-->{{#if:{{{4|}}}|{{!}}{{{4}}}}}<!--
-->{{#if:{{{5|}}}|{{!}}{{{5}}}}}<!--
-->{{#if:{{{6|}}}|{{!}}{{{6}}}}}<!--
-->{{#if:{{{7|}}}|{{!}}{{{7}}}}}<!--
-->{{#if:{{{8|}}}|{{!}}''...''}}<!--
-->{{))}}<!--
--></span><!--
--></onlyinclude>
{{documentation}}
25c4c72191d3dad2c3476ae6092c6c17ee3034d8
Template:Template link expanded
10
142
332
331
2023-06-06T09:16:25Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_link_expanded]]: w
wikitext
text/x-wiki
{{#Invoke:Template link general|main|code=on}}<noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlx}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
6c99696fee02f1da368ed20d2504e19bc15b1c13
Template:Distinguish
10
143
334
333
2023-06-06T09:16:26Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Distinguish]]: w
wikitext
text/x-wiki
{{#invoke:Distinguish|distinguish}}<noinclude><!-- splitting these lines causes {{Documentation}} template to terminate green shading when Distinguish is used in /doc pages. -->
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata, not here! -->
</noinclude>
f949a4cbfd6eb0ab77b832e69059a40a964b1fd8
Module:Distinguish
828
144
336
335
2023-06-06T09:16:27Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Distinguish]]: w
Scribunto
text/plain
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local mTableTools --initialize lazily
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
function p.distinguish(frame)
mArguments = require('Module:Arguments')
mTableTools = require('Module:TableTools')
local args = mArguments.getArgs(frame)
local selfref = args.selfref
local text = args.text
args = mTableTools.compressSparseArray(args)
return p._distinguish(args, text, selfref)
end
function p._distinguish(args, text, selfref)
checkType("_distinguish", 1, args, 'table')
if #args == 0 and not text then return '' end
local text = string.format(
'Not to be confused with %s.',
text or mHatlist.orList(args, true)
)
hnOptions = {selfref = selfref}
return mHatnote._hatnote(text, hnOptions)
end
return p
0364d14af01fc656ad1d898c5036fbd12a7ca938
Template:Further
10
145
338
337
2023-06-06T09:16:30Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Further]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:labelled list hatnote|labelledList|Further information{{#if:{{{topic|}}}| on {{{topic|}}}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
dd29c6dfb3894a2dc3f20144a654b7012c9a9214
Template:Ombox
10
146
340
339
2023-06-06T09:16:31Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Ombox]]: w
wikitext
text/x-wiki
{{#invoke:Message box|ombox}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
0e54065432d540737b9e56c4e3a8e7f74d4534ea
Template:Em
10
147
342
341
2023-06-06T09:16:31Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Em]]: w
wikitext
text/x-wiki
<em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
e2fac6fb507a0dd72c4e79d02403049c7d857c8d
Template:Section link
10
148
344
343
2023-06-06T09:16:32Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Section_link]]: w
wikitext
text/x-wiki
{{#invoke:Section link|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
8d047e5845f8a9b74a4655b5dd79ca7595a8f88b
Module:Section link
828
149
346
345
2023-06-06T09:16:32Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Section_link]]: w
Scribunto
text/plain
-- This module implements {{section link}}.
require('strict');
local checkType = require('libraryUtil').checkType
local p = {}
local function makeSectionLink(page, section, display)
display = display or section
page = page or ''
-- MediaWiki doesn't allow these in `page`, so only need to do for `section`
if type(section) == 'string' then
section = string.gsub(section, "{", "{")
section = string.gsub(section, "}", "}")
end
return string.format('[[%s#%s|%s]]', page, section, display)
end
local function normalizeTitle(title)
title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '')
title = mw.ustring.gsub(title, "%b<>", "")
return mw.title.new(title).prefixedText
end
function p._main(page, sections, options, title)
-- Validate input.
checkType('_main', 1, page, 'string', true)
checkType('_main', 3, options, 'table', true)
if sections == nil then
sections = {}
elseif type(sections) == 'string' then
sections = {sections}
elseif type(sections) ~= 'table' then
error(string.format(
"type error in argument #2 to '_main' " ..
"(string, table or nil expected, got %s)",
type(sections)
), 2)
end
options = options or {}
title = title or mw.title.getCurrentTitle()
-- Deal with blank page names elegantly
if page and not page:find('%S') then
page = nil
options.nopage = true
end
-- Make the link(s).
local isShowingPage = not options.nopage
if #sections <= 1 then
local linkPage = page or ''
local section = sections[1] or 'Notes'
local display = '§ ' .. section
if isShowingPage then
page = page or title.prefixedText
if options.display and options.display ~= '' then
if normalizeTitle(options.display) == normalizeTitle(page) then
display = options.display .. ' ' .. display
else
error(string.format(
'Display title "%s" was ignored since it is ' ..
"not equivalent to the page's actual title",
options.display
), 0)
end
else
display = page .. ' ' .. display
end
end
return makeSectionLink(linkPage, section, display)
else
-- Multiple sections. First, make a list of the links to display.
local ret = {}
for i, section in ipairs(sections) do
ret[i] = makeSectionLink(page, section)
end
-- Assemble the list of links into a string with mw.text.listToText.
-- We use the default separator for mw.text.listToText, but a custom
-- conjunction. There is also a special case conjunction if we only
-- have two links.
local conjunction
if #sections == 2 then
conjunction = '​ and '
else
conjunction = ', and '
end
ret = mw.text.listToText(ret, nil, conjunction)
-- Add the intro text.
local intro = '§§ '
if isShowingPage then
intro = (page or title.prefixedText) .. ' ' .. intro
end
ret = intro .. ret
return ret
end
end
function p.main(frame)
local yesno = require('Module:Yesno')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Section link',
valueFunc = function (key, value)
value = value:match('^%s*(.-)%s*$') -- Trim whitespace
-- Allow blank first parameters, as the wikitext template does this.
if value ~= '' or key == 1 then
return value
end
end
})
for k, v in pairs(args) do -- replace underscores in the positional parameter values
if 'number' == type(k) then
if not yesno (args['keep-underscores']) then -- unless |keep-underscores=yes
args[k] = mw.uri.decode (v, 'WIKI'); -- percent-decode; replace underscores with space characters
else
args[k] = mw.uri.decode (v, 'PATH'); -- percent-decode; retain underscores
end
end
end
-- Sort the arguments.
local page
local sections, options = {}, {}
for k, v in pairs(args) do
if k == 1 then
-- Doing this in the loop because of a bug in [[Module:Arguments]]
-- when using pairs with deleted arguments.
page = mw.text.decode(v, true)
elseif type(k) == 'number' then
sections[k] = v
else
options[k] = v
end
end
options.nopage = yesno (options.nopage); -- make boolean
-- Extract section from page, if present
if page then
local p, s = page:match('^(.-)#(.*)$')
if p then page, sections[1] = p, s end
end
-- Compress the sections array.
local function compressArray(t)
local nums, ret = {}, {}
for num in pairs(t) do
nums[#nums + 1] = num
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
sections = compressArray(sections)
return p._main(page, sections, options)
end
return p
5cc61d43dc601ca43e9472500fc5cd09ca7cea44
Template:Collapse top
10
150
348
347
2023-06-06T09:16:33Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Collapse_top]]: w
wikitext
text/x-wiki
<div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section -->
{| <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;"
|-
! style="background: {{{bg|#{{main other|F0F2F5|CCFFCC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div>
{{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}}
|{{<includeonly>safesubst:</includeonly>!}}-
{{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }}
|-
| style="border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|White}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude>
{{lorem ipsum|3}}
{{Collapse bottom}}
{{Documentation}}
</noinclude>
247cc43d5198baf8804d0926529cbbdd7be91113
Template:Collapse bottom
10
151
350
349
2023-06-06T09:16:33Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Collapse_bottom]]: w
wikitext
text/x-wiki
<includeonly>|}</div></includeonly><noinclude>
{{Documentation|Template:Collapse top/doc}}
<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS -->
</noinclude>
64b210e8ab0882b262da50e9fbccf2132bc34fab
Template:No redirect
10
152
352
351
2023-06-06T09:16:33Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:No_redirect]]: w
wikitext
text/x-wiki
{{safesubst:<noinclude/>#if: {{safesubst:<noinclude/>#invoke:Redirect|isRedirect|{{{1}}}}}
| <span class="plainlinks">[{{safesubst:<noinclude/>fullurl:{{{1}}}|redirect=no}} {{{2|{{{1}}}}}}]</span>
| {{safesubst:<noinclude/>#if:{{{2|}}}|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}|{{{2}}}]]|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}]]}}
}}<noinclude>
{{documentation}}
</noinclude>
1760035b1bed54ee08b810208ed3551b812dfe13
Template:Further information
10
153
354
353
2023-06-06T09:16:34Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Further_information]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Further]]
{{R from move}}
42879303989bb2724f884c7b099077b50c789c48
Template:Tlxs
10
154
356
355
2023-06-06T09:16:35Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tlxs]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link expanded with subst]]
{{Redirect category shell|
{{R from move}}
}}
74e095f26cae0cd68518f2f66d74e948a7861c79
Template:Template link expanded with subst
10
155
358
357
2023-06-06T09:16:36Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_link_expanded_with_subst]]: w
wikitext
text/x-wiki
{{#Invoke:Template link general|main|code=on|subst=on}}<noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlxs}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
9b2ef0a8c882c336902f1d61dcff3658528c2210
Module:Shortcut
828
156
360
359
2023-06-06T09:16:36Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Shortcut]]: w
Scribunto
text/plain
-- This module implements {{shortcut}}.
-- Set constants
local CONFIG_MODULE = 'Module:Shortcut/config'
-- Load required modules
local checkType = require('libraryUtil').checkType
local yesno = require('Module:Yesno')
local p = {}
local function message(msg, ...)
return mw.message.newRawMessage(msg, ...):plain()
end
local function makeCategoryLink(cat)
return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat)
end
function p._main(shortcuts, options, frame, cfg)
checkType('_main', 1, shortcuts, 'table')
checkType('_main', 2, options, 'table', true)
options = options or {}
frame = frame or mw.getCurrentFrame()
cfg = cfg or mw.loadData(CONFIG_MODULE)
local templateMode = options.template and yesno(options.template)
local redirectMode = options.redirect and yesno(options.redirect)
local isCategorized = not options.category or yesno(options.category) ~= false
-- Validate shortcuts
for i, shortcut in ipairs(shortcuts) do
if type(shortcut) ~= 'string' or #shortcut < 1 then
error(message(cfg['invalid-shortcut-error'], i), 2)
end
end
-- Make the list items. These are the shortcuts plus any extra lines such
-- as options.msg.
local listItems = {}
for i, shortcut in ipairs(shortcuts) do
local templatePath, prefix
if templateMode then
-- Namespace detection
local titleObj = mw.title.new(shortcut, 10)
if titleObj.namespace == 10 then
templatePath = titleObj.fullText
else
templatePath = shortcut
end
prefix = options['pre' .. i] or options.pre or ''
end
if options.target and yesno(options.target) then
listItems[i] = templateMode
and string.format("{{%s[[%s|%s]]}}", prefix, templatePath, shortcut)
or string.format("[[%s]]", shortcut)
else
listItems[i] = frame:expandTemplate{
title = 'No redirect',
args = templateMode and {templatePath, shortcut} or {shortcut, shortcut}
}
if templateMode then
listItems[i] = string.format("{{%s%s}}", prefix, listItems[i])
end
end
end
table.insert(listItems, options.msg)
-- Return an error if we have nothing to display
if #listItems < 1 then
local msg = cfg['no-content-error']
msg = string.format('<strong class="error">%s</strong>', msg)
if isCategorized and cfg['no-content-error-category'] then
msg = msg .. makeCategoryLink(cfg['no-content-error-category'])
end
return msg
end
local root = mw.html.create()
root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Shortcut/styles.css'} })
-- Anchors
local anchorDiv = root
:tag('div')
:addClass('module-shortcutanchordiv')
for i, shortcut in ipairs(shortcuts) do
local anchor = mw.uri.anchorEncode(shortcut)
anchorDiv:tag('span'):attr('id', anchor)
end
-- Shortcut heading
local shortcutHeading
do
local nShortcuts = #shortcuts
if nShortcuts > 0 then
local headingMsg = options['shortcut-heading'] or
redirectMode and cfg['redirect-heading'] or
cfg['shortcut-heading']
shortcutHeading = message(headingMsg, nShortcuts)
shortcutHeading = frame:preprocess(shortcutHeading)
end
end
-- Shortcut box
local shortcutList = root
:tag('div')
:addClass('module-shortcutboxplain noprint')
:attr('role', 'note')
if options.float and options.float:lower() == 'left' then
shortcutList:addClass('module-shortcutboxleft')
end
if options.clear and options.clear ~= '' then
shortcutList:css('clear', options.clear)
end
if shortcutHeading then
shortcutList
:tag('div')
:addClass('module-shortcutlist')
:wikitext(shortcutHeading)
end
local ubl = require('Module:List').unbulleted(listItems)
shortcutList:wikitext(ubl)
return tostring(root)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame)
-- Separate shortcuts from options
local shortcuts, options = {}, {}
for k, v in pairs(args) do
if type(k) == 'number' then
shortcuts[k] = v
else
options[k] = v
end
end
-- Compress the shortcut array, which may contain nils.
local function compressArray(t)
local nums, ret = {}, {}
for k in pairs(t) do
nums[#nums + 1] = k
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
shortcuts = compressArray(shortcuts)
return p._main(shortcuts, options, frame)
end
return p
03fd46a265e549852a9ed3d3a9249b247d84cb4f
Module:Shortcut/config
828
157
362
361
2023-06-06T09:16:36Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Shortcut/config]]: w
Scribunto
text/plain
-- This module holds configuration data for [[Module:Shortcut]].
return {
-- The heading at the top of the shortcut box. It accepts the following parameter:
-- $1 - the total number of shortcuts. (required)
['shortcut-heading'] = '[[Wikipedia:Shortcut|{{PLURAL:$1|Shortcut|Shortcuts}}]]',
-- The heading when |redirect=yes is given. It accepts the following parameter:
-- $1 - the total number of shortcuts. (required)
['redirect-heading'] = '[[Wikipedia:Redirect|{{PLURAL:$1|Redirect|Redirects}}]]',
-- The error message to display when a shortcut is invalid (is not a string, or
-- is the blank string). It accepts the following parameter:
-- $1 - the number of the shortcut in the argument list. (required)
['invalid-shortcut-error'] = 'shortcut #$1 was invalid (shortcuts must be ' ..
'strings of at least one character in length)',
-- The error message to display when no shortcuts or other displayable content
-- were specified. (required)
['no-content-error'] = 'Error: no shortcuts were specified and the ' ..
mw.text.nowiki('|msg=') ..
' parameter was not set.',
-- A category to add when the no-content-error message is displayed. (optional)
['no-content-error-category'] = 'Shortcut templates with missing parameters',
}
f9d1d94844d5953753eb19e30a3ce389eda3d319
Template:Param
10
158
364
363
2023-06-06T09:16:38Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Param]]: w
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||<{{{tag|code}}}>}}{{{{{{1<noinclude>|foo</noinclude>}}}{{SAFESUBST:<noinclude />#ifeq:{{{2}}}|{{{2|}}} ||}}{{{2|}}}}}}{{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||</{{{tag|code}}}>}}<noinclude>
{{Documentation}}
<!--
PLEASE ADD CATEGORIES AND INTERWIKIS
TO THE /doc SUBPAGE, THANKS
-->
</noinclude>
abdb5d7fe0982064ea62ad15e8298d1693ed69e2
Template:Never substitute
10
159
366
365
2023-06-06T09:16:39Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Never_substitute]]: w
wikitext
text/x-wiki
{{Ombox
|type=notice
|text='''This template should {{em|not}} be [[Wikipedia:Substitution|substituted]].''' {{{1|}}}
}}<noinclude>
{{Documentation}}
</noinclude>
ed10c57c4f8088f4a40cd7d066ae311218883d20
Template:Template shortcut
10
160
368
367
2023-06-06T09:16:39Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_shortcut]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Shortcut|main|template=yes}}</includeonly><noinclude>{{Documentation}}</noinclude>
bfb2889c4c0ec36294b7b667f5e03350d2df680e
Module:Transclusion count/data/D
828
161
370
369
2023-06-06T09:16:40Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Transclusion_count/data/D]]: w
Scribunto
text/plain
return {
["D&D"] = 3900,
["D&D_to-do"] = 5600,
["D-da"] = 2600,
["DANFS"] = 8400,
["DC-Comics-trademark-copyright"] = 2100,
["DCS_Sri_Lanka"] = 2100,
["DDR"] = 2800,
["DEC"] = 8600,
["DECADE"] = 283000,
["DEN"] = 6700,
["DEU"] = 17000,
["DMC"] = 61000,
["DMCA"] = 2090000,
["DNB"] = 8800,
["DNB-Portal"] = 2100,
["DNB_portal"] = 3800,
["DNK"] = 7700,
["DNZB"] = 3600,
["DOM"] = 2100,
["DOWs"] = 2600,
["DPP"] = 100000,
["DPP/logo"] = 100000,
["DRV_links"] = 3600,
["DWT"] = 2300,
["DYKC"] = 6700,
["DYKF"] = 2100,
["DYK_blue"] = 3400,
["DYK_checklist"] = 13000,
["DYK_conditions"] = 65000,
["DYK_files"] = 2100,
["DYK_header"] = 32000,
["DYK_nompage_links"] = 76000,
["DYK_talk"] = 102000,
["DYK_talk/date"] = 102000,
["DYK_tools"] = 51000,
["DYK_tools/styles.css"] = 51000,
["DYKfile"] = 12000,
["DZA"] = 2700,
["Dab"] = 17000,
["Dablink"] = 2100,
["Dagger"] = 17000,
["Dashboard.wikiedu.org_assignment"] = 13000,
["Dashboard.wikiedu.org_bibliography/guide"] = 6400,
["Dashboard.wikiedu.org_course_header"] = 5900,
["Dashboard.wikiedu.org_course_header/edit-note"] = 5900,
["Dashboard.wikiedu.org_draft_template/about_this_sandbox"] = 9800,
["Dashboard.wikiedu.org_evaluate_article/guide"] = 7200,
["Dashboard.wikiedu.org_peer_review/guide"] = 11000,
["Dashboard.wikiedu.org_sandbox"] = 91000,
["Dashboard.wikiedu.org_student_editor"] = 79000,
["Dashboard.wikiedu.org_student_program_sandbox"] = 91000,
["Dashboard.wikiedu.org_talk_course_link"] = 80000,
["Dashboard.wikiedu.org_user_talk"] = 2200,
["Date"] = 41000,
["Date-mf"] = 38000,
["Date_table_sorting"] = 38000,
["Dated_maintenance_category"] = 2150000,
["Dated_maintenance_category_(articles)"] = 2090000,
["Dated_maintenance_category_by_type_(articles)"] = 21000,
["Davis_Cup_player"] = 2500,
["Day+1"] = 6900,
["Day-1"] = 8300,
["Dbox"] = 3000,
["Dda"] = 5300,
["Dead_YouTube_link"] = 2700,
["Dead_Youtube_links"] = 2500,
["Dead_link"] = 275000,
["Death-date"] = 11000,
["Death-date_and_age"] = 10000,
["Death_date"] = 9100,
["Death_date_and_age"] = 380000,
["Death_date_and_given_age"] = 2500,
["Death_year_and_age"] = 16000,
["Death_year_category_header"] = 2000,
["Decade"] = 2100,
["Decade_link"] = 32000,
["Decimals"] = 3000,
["Decline"] = 2500,
["Declined"] = 3200,
["Decrease"] = 34000,
["Define"] = 5100,
["Deg2DMS"] = 3400,
["Deletion_review_log_header"] = 5600,
["Deletion_review_log_header/Core"] = 5600,
["Delink"] = 1960000,
["Delink_question_hyphen-minus"] = 292000,
["Delrevxfd"] = 3500,
["Democratic_Party_(US)/meta/shading"] = 15000,
["Description_missing"] = 6900,
["Designation/abbreviation"] = 8100,
["Designation/color"] = 76000,
["Designation/colour"] = 79000,
["Designation/colour2"] = 18000,
["Designation/divbox"] = 29000,
["Designation/text"] = 42000,
["Designation_list"] = 5300,
["Details"] = 4700,
["DetailsLink"] = 5800,
["Detect_singular"] = 197000,
["Deutsche_Bahn_station_codes"] = 2200,
["DfE_performance_tables"] = 4500,
["Diff"] = 30000,
["Diff2"] = 11000,
["Digits"] = 21000,
["Directories_box"] = 3200,
["Disamb"] = 2200,
["Disambig"] = 63000,
["Disambig-Class"] = 12000,
["DisambigProj"] = 12000,
["DisambigProject"] = 150000,
["Disambigproject"] = 5800,
["Disambiguation"] = 216000,
["Disambiguation/cat"] = 216000,
["Disambiguation_page_short_description"] = 350000,
["Discogs_artist"] = 16000,
["Discogs_master"] = 12000,
["Discogs_release"] = 3000,
["Discussion_bottom"] = 11000,
["Discussion_top"] = 12000,
["DisestcatCountry"] = 9500,
["DisestcatCountry/core"] = 9500,
["DisestcatCountryDecade"] = 2600,
["DisestcatUSstate"] = 4900,
["DisestcatUSstate/core"] = 4900,
["Disputed"] = 2200,
["Distinguish"] = 95000,
["Disused_Rail_Start"] = 4000,
["Disused_rail_start"] = 4300,
["Disused_style"] = 4600,
["Div_col"] = 396000,
["Div_col/styles.css"] = 398000,
["Div_col_end"] = 297000,
["Div_col_start"] = 2900,
["Div_end"] = 2600,
["Divbox"] = 333000,
["Divbox/styles.css"] = 357000,
["Dividing_line"] = 4000,
["Dmbox"] = 456000,
["Dmbox/styles.css"] = 456000,
["Do_not_move_to_Commons"] = 16000,
["Doc"] = 3500,
["Documentation"] = 89000,
["Documentation_subpage"] = 95000,
["Dog_opentask"] = 3400,
["Doi"] = 25000,
["Doing"] = 3600,
["Don't_edit_this_line"] = 106000,
["Don't_edit_this_line_always_display"] = 469000,
["Don't_edit_this_line_extinct"] = 469000,
["Don't_edit_this_line_link_target"] = 469000,
["Don't_edit_this_line_link_text"] = 469000,
["Don't_edit_this_line_parent"] = 469000,
["Don't_edit_this_line_rank"] = 469000,
["Don't_edit_this_line_refs"] = 106000,
["Don't_edit_this_line_same_as"] = 469000,
["Done"] = 101000,
["Doppelganger"] = 2700,
["Dot"] = 2600,
["Double+single"] = 2700,
["Double-dagger"] = 18000,
["Dr"] = 3400,
["Dr-logno"] = 3400,
["Dr-make"] = 3400,
["Dr-yr"] = 3400,
["Draft"] = 3700,
["Draft_article"] = 5700,
["Draft_article_check"] = 5800,
["Draft_categories"] = 6100,
["Draft_other"] = 115000,
["Draft_topics"] = 26000,
["Drafts_moved_from_mainspace"] = 12000,
["Draw"] = 3800,
["Draw_key"] = 17000,
["Draw_links"] = 13000,
["Drep"] = 3400,
["Drugbankcite"] = 4300,
["Drugbox"] = 7500,
["Drugs.com"] = 3600,
["Ds/talk_notice"] = 6200,
["Dts"] = 38000,
["Dubious"] = 8100,
["Duck"] = 2900,
["Dummytab"] = 4800,
["Duration"] = 38000,
["Dutch_municipality"] = 2600,
["Dyktalk"] = 42000,
["Dynamic_list"] = 9800,
["Module:DYK_checklist"] = 13000,
["Module:DYK_checklist/data"] = 13000,
["Module:DYK_nompage_links"] = 76000,
["Module:Data"] = 148000,
["Module:Date"] = 1360000,
["Module:DateI18n"] = 65000,
["Module:Date_table_sorting"] = 38000,
["Module:DecodeEncode"] = 113000,
["Module:Delink"] = 2070000,
["Module:Detect_singular"] = 1500000,
["Module:Disambiguation"] = 3500000,
["Module:Distinguish"] = 95000,
["Module:Documentation"] = 135000,
["Module:Documentation/config"] = 135000,
["Module:Documentation/styles.css"] = 135000,
["Module:Draft_topics"] = 26000,
["Module:Duration"] = 236000,
}
28eacb8bec85d8e4733a57d9fa28b3b3ffa8696b
Template:Documentation/doc
10
162
372
371
2023-06-06T09:16:41Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Documentation/doc]]: w
wikitext
text/x-wiki
<noinclude>{{pp-semi-indef}}
</noinclude>{{Distinguish|Template:Documentation subpage}}
{{Documentation subpage}}
{{template shortcut|doc}}
{{High-use}}
{{Lua|Module:Documentation}}
{{Never substitute}}
The {{tlx|documentation}} template is used to contain the [[WP:TDOC|documented information and instructions]] of a certain template, usually from a /doc subpage. It can also be configured to load the content from other pages or be directly fed by text.
For detailed instructions on how and when to use this template, see [[Wikipedia:Template documentation]] (shortcut: [[WP:TDOC]]).
This template has two parts: the big "documentation box" with the documentation inside alongside a toolbar (the <code>[view][edit][hist][purge]</code> links), and the smaller "link box" that shows metadata about the documentation alongside the [[Wikipedia:Template sandbox and test cases|sandbox and testcases]] links.
Use of this template allows templates to be [[Wikipedia:Protection policy|protected]], where necessary, while allowing anyone to edit the documentation and categories.
== General syntax ==
Normally, the template is used without parameters and is placed inside {{tag|noinclude}} at the bottom of the template page (see {{section link|#Placement and tags}} for more information):
<syntaxhighlight lang="wikitext">
<!--Last line of your template code--><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage -->
</noinclude>
</syntaxhighlight>
=== Transcluding a different page ===
To transclude a different page other than the /doc subpage, simply provide {{para|1}} like this:
<syntaxhighlight lang="wikitext">
<!--Last line of your template code--><noinclude>
{{Documentation|Template:Other page/doc}}
</noinclude>
</syntaxhighlight>
Note that when loading the documentation from a page other than the local /doc subpage, it becomes tricky to handle the categories.
=== Using the {{para|content}} parameter ===
The documentation can also be fed directly as text, by using the {{para|content}} parameter:
<syntaxhighlight lang="wikitext">
<!--Last line of your template code--><noinclude>
{{Documentation
| content =
<!-- template documentation -->
}}</noinclude>
</syntaxhighlight>
When using this parameter, the toolbar will not show. Note that the /doc subpage in the link box will still show up if it exists.
Also note that when {{para|1}} and {{para|content}} is specified, {{para|content}} takes precedence and always shows in the documentation box.
== Advanced syntax ==
=== Customizing the heading ===
The heading in the documentation box changes depending on namespace. See the below list for the default text in each namespace:
* Template namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Template documentation'''
* Module namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Module documentation'''
* Other namespaces: '''Documentation'''
To customize the heading, simply set the parameter {{para|heading}} to anything you like, for example {{para|heading|Infobox documentation}}.
Note that if the heading parameter is empty but defined (like {{para|heading|}}) the heading alongside the toolbar will not show.
The {{para|heading-style}} parameter can be fed optional [[Cascading Style Sheets|CSS]] values, like {{para|heading-style|font-size:150%;color:red;}}. Not that you should omit quotation marks <code>" "</code> and add the ending semicolon <code>;</code>.
=== Customizing the link box ===
To customize the link box, simply set {{para|link box}} to something else, like {{para|link box|The above documentation is automatically generated from [[Template:Foo]]}}.
To hide the link box, simply set {{para|link box}} to <code>off</code>.
=== Testing ===
You can simulate the output for a given page by using the {{para|page}} parameter. For example, if you use the code {{para|page|Template:Edit protected}}, the template will behave exactly as if it were on the page [[Template:Edit protected]], including showing the documentation from [[Template:Edit protected/doc]], linking to [[Template:Edit protected/sandbox]], etc. This parameter is useful for testing and is used extensively on the [[Module:Documentation/testcases|module testcases page]].
== Placement and tags ==
{{Further information|Wikipedia:Template documentation#Where to place it}}
This code should be added at the bottom of the template code page, with no space before {{Tag|noinclude|o}} (which causes extra whitespace to show on pages where the template is transcluded):
<syntaxhighlight lang="wikitext"><!--Last line of your template code--><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage -->
</noinclude></syntaxhighlight>
To automatically insert the above text, you can also use the [[Wikipedia:Substitution|substitution]] code shortcut {{tlxs|doc-code}}.
=== Categories and interwikis ===
Depending on where to the documentation is placed, it may be tricky to handle the categories and interwikis. See {{section link|Wikipedia:Template documentation#Categories and interwiki links}} for information about adding these.
== Technical details ==
=== Automatic functions ===
If the documentation page does not exist, the toolbar is replaced with a <code>[create]</code> link. It automatically [[mw:Manual:Creating pages with preloaded text|creates the page with preloaded text]] with the basic documentation syntax. Preload text is also used for the /sandbox and /testcases [create] links.
The preload page for the /doc <code>[create]</code> link is [[Template:Documentation/preload]]. The preload pages for the /sandbox and /testcases links are [[Template:Documentation/preload-sandbox]] and [[Template:Documentation/preload-testcases]]. The preload page for the /sandbox <code>[mirror]</code> link is [[Template:Documentation/mirror]].
This template also automatically adds {{tl|pp-template}} to a protected template page, so no need to manually add this template to protected pages.
When this template is on a /sandbox subpage it automatically adds the {{tl|Template sandbox notice}} template.
=== Link box features ===
Depending on the namespace, the link box may have less features, or may not show up at all. The following table shows this:
{| class="wikitable"
! Namespace
! Behavior
|-
| Template
| Full behavior
|-
| Module
| Full behavior, with the addition of a "create documentation" link when the page does not exist
|-
| User
| Full behavior
|-
| Other namespaces
| Hidden, unless {{para|1}} is specified (which will show "The above documentation is transcluded from {{param|1}}")
|}
Alongside that, if {{para|1}} or {{para|content}} is specified, the "Add categories to the /doc subpage" will not show.
=== Subject namespaces vs. talk namespaces ===
This template is usually placed in the [[WP:NS#Subject namespaces|subject namespace]]. But in some cases this template needs to be on the [[WP:TALKSPACE|Talk namespace]]:
* In the MediaWiki namespace, since {{tag|noinclude|o}} often does not work in system messages, and since the MediaWiki namespace needs to be kept clean for performance reasons.
When placed on talk pages, this template usually is placed near the top of the page and without {{tag|noinclude}} tags.
The /doc, /sandbox and /testcases pages should normally be in the subject namespace, except in the namespaces that do not have the MediaWiki [[meta:Help:Link#Subpage feature|subpage feature]] enabled: Main, File, and MediaWiki. (Categories can have subpages, but documentation is created in the Category talk namespace to prevent creating empty categories. There are also a whole bunch of other technical reasons why the /doc page must be stored under the talk page for those (but only those) namespaces.
This template automatically points its [create] links for the /doc, /sandbox and /testcases to the right namespace.
== Full syntax ==
<syntaxhighlight lang="wikitext">
{{Documentation}}
or
{{Documentation
| [path to documentation page]
}}
{{Documentation
| content =
}}
or
{{Documentation
| [path to documentation page]
| heading-style =
| heading =
| link box =
}}
or
{{Documentation
| [path to documentation page]
| content =
| heading-style =
| heading =
| link box =
| page =
}}
</syntaxhighlight>
=== Color scheme ===
{| class="wikitable" style="font-size:90%"
|+ Wikipedia background colors for {{Template link|documentation}} <small>([[Help:Using colors]])</small>
! !! RGB !! HSV !! Color !! General usage !! Note
|-
| A
| <kbd>#ECFCF4</kbd> || 150°, 6%, 99%
| style="background:#ECFCF4" |
| Sample || Current documentation background
|-
| B
| <kbd>#00FF80</kbd>
| style="font-size:90%;" | {{nowrap|1=Hue=150° <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}}
| style="background:#00FF80" |
| Basic hue || What we'd call ''the color''
|-
| colspan="6" |
|-
| 1
| <kbd>#A3BFB1</kbd> || 150°, 15%, 75%
| style="background:#A3BFB1" |
| Header border only ||
|-
| 2
| <kbd>#CEF2E0</kbd> || 150°, 15%, 95%
| style="background:#CEF2E0" |
| Main border; header background ||
|-
| 3
| <kbd>#E6FFF2</kbd> || 150°, 10%, 100%
| style="background:#E6FFF2" |
| 2nd header, accent colour ||
|-
| 4
| <kbd>#F5FFFA</kbd> || 150°, 4%, 100%
| style="background:#F5FFFA" |
| Main background || So saturation in A is a bit off
|}
{{collapse top|title=Colors for documentation navbox}}
As a suggestion, here are colors for a navbox intended for documentation pages only.
They follow the shading of regular blue navbox colors:
<syntaxhighlight lang="wikitext">
| titlestyle = background:#ccffe5
| basestyle = background:#ddffee
<!-- basestyle= sets groupstyle, abovestyle, belowstyle together -->
</syntaxhighlight>
For subgroups, in child navboxes:
<syntaxhighlight lang="wikitext">
{{Navbox|child
| groupstyle = background:#e6fff2
...
</syntaxhighlight>
Example:{{Template link expanded|Periodic table templates}}
{{collapse bottom}}
==See also==
* {{tl|Documentation subpage}}, a notice placed at the top of a /doc subpage explaining its role and including a link to the page it documents.
* {{tl|Barnstar documentation}}, a variant of {{tl|Documentation}} for use with [[Wikipedia:Barnstars|barnstar]] templates.
* [[Wikipedia:Template documentation]] is a how-to guide to template documentation.
* [[Wikipedia:Template sandbox and test cases]] explains the use of /sandbox and /testcases subpages and includes more information about template testing.
<includeonly><!-- Make sure that only page [[Template:Documentation]] is categorised. No other page (no subpages, not when transcluded).
-->{{#ifeq:{{FULLPAGENAME}}|Template:Documentation|
[[Category:Template documentation| ]]
[[Category:Template namespace templates|Documentation]]
}}</includeonly>
431959208b67db006bc22ce92572aa643072c326
Module:Shortcut/styles.css
828
163
374
373
2023-06-06T09:16:42Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Shortcut/styles.css]]: w
sanitized-css
text/css
/* {{pp-template}} */
.module-shortcutboxplain {
float: right;
margin: 0 0 0 1em;
border: 1px solid #aaa;
background: #fff;
padding: 0.3em 0.6em 0.2em 0.6em;
text-align: center;
font-size: 85%;
}
.module-shortcutboxleft {
float: left;
margin: 0 1em 0 0;
}
.module-shortcutlist {
display: inline-block;
border-bottom: 1px solid #aaa;
margin-bottom: 0.2em;
}
.module-shortcutboxplain ul {
font-weight: bold;
}
.module-shortcutanchordiv {
position: relative;
top: -3em;
}
li .module-shortcutanchordiv {
float: right; /* IE/Edge in list items */
}
.mbox-imageright .module-shortcutboxplain {
padding: 0.4em 1em 0.4em 1em;
line-height: 1.3;
margin: 0;
}
ccf3877e4b14726147d3b1d8a297fbecacdb2cf8
Template:Lua
10
122
376
277
2023-06-06T09:19:09Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Lua]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude>
{{Lua|Module:Lua banner}}
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7
Template:Tim
10
164
378
377
2023-06-06T09:19:10Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Tim]]: w
wikitext
text/x-wiki
[[m:Template:{{{1|{{PAGENAME}}}}}]]<noinclude>
{{documentation|content=
Displays a link to a template on Meta.
* {{xpds|tim|foo}}
[[Category:Shortcut templates|{{PAGENAME}}]]
[[Category:External link templates]]}}</noinclude>
2bed05d802e6f826c40c07ef66c9e0df72d4028d
Module:Lua banner
828
121
380
275
2023-06-06T09:19:10Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Lua_banner]]: w
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules)
local trackingCategories = p.renderTrackingCategories(args, modules)
return box .. trackingCategories
end
function p.renderBox(modules)
local boxArgs = {}
if #modules < 1 then
boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
local maybeSandbox = mw.title.new(module .. '/sandbox')
if maybeSandbox.exists then
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
end
end
local moduleList = mList.makeList('bulleted', moduleLinks)
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" then
title = title.basePageTitle
end
if title.contentModel == "Scribunto" then
boxArgs.text = 'This module depends on the following other modules:' .. moduleList
else
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]'
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj)
if yesno(args.nocat) then
return ''
end
local cats = {}
-- Error category
if #modules < 1 then
cats[#cats + 1] = 'Lua templates with errors'
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if not subpageBlacklist[titleObj.subpageText] then
local protCatName
if titleObj.namespace == 10 then
local category = args.category
if not category then
local categories = {
['Module:String'] = 'Templates based on the String Lua module',
['Module:Math'] = 'Templates based on the Math Lua module',
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module'
}
category = modules[1] and categories[modules[1]]
category = category or 'Lua-based templates'
end
cats[#cats + 1] = category
protCatName = "Templates using under-protected Lua modules"
elseif titleObj.namespace == 828 then
protCatName = "Modules depending on under-protected modules"
end
if not args.noprotcat and protCatName then
local protLevels = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
local currentProt
if titleObj.id ~= 0 then
-- id is 0 (page does not exist) if am previewing before creating a template.
currentProt = titleObj.protectionLevels["edit"][1]
end
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end
for i, module in ipairs(modules) do
if module ~= "WP:libraryUtil" then
local moduleProt = mw.title.new(module).protectionLevels["edit"][1]
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end
if moduleProt < currentProt then
cats[#cats + 1] = protCatName
break
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
03ec1b34a40121efc562c0c64a67ebbf57d56dff
Module:Lua banner/config
828
165
382
381
2023-06-06T09:19:10Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Lua_banner/config]]: w
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Allow wishes: whether wishes for conversion to Lua are allowed.
-- If true, calls with zero parameters are valid, and considered to be wishes:
-- The box’s text is “This template should use Lua”, and cfg['wish_category'] is
-- added. If false, such calls are invalid, an error message appears, and
-- cfg['error_category'] is added.
cfg['allow_wishes'] = false
-- Default category: this category is added if the module call contains errors
-- (e.g. no module listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = 'Lua templates with errors'
-- Wish category: this category is added if no module is listed, and wishes are
-- allowed. (Not used if wishes are not allowed.) A category name without
-- namespace, or nil to disable categorization.
cfg['wish_category'] = 'Lua-candidates'
-- Default category: this category is added if none of the below module_categories
-- matches the first module listed. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Lua-based templates'
-- Module categories: one of these categories is added if the first listed module
-- is the listed module (e.g. {{Lua|Module:String}} adds
-- [[Category:Lua String-based templates]].) Format:
-- ['<module name>'] = '<category name>'
-- where neither <module name> nor <category name> contains namespace. An empty
-- table (i.e. no module-based categorization) will suffice on smaller wikis.
cfg['module_categories'] = {
['String'] = 'Lua String-based templates',
}
return cfg -- Don’t touch this line.
960aa5bb0f008cf7e3ef37963e1dbc797c2ffdd5
Template:Pp-template
10
166
384
383
2023-06-06T09:19:11Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Pp-template]]: w
wikitext
text/x-wiki
<includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}}
|*=[[Category:Pages with incorrect protection templates]]
|autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]]
|sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]]
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1046e139e5a0380698fd75d7207e9ef53a4ff91d
Template:Module other
10
167
386
385
2023-06-06T09:19:12Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Module_other]]: w
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Module}}
| module
| other
}}
}}
| module = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
5a2444103b3cffc028f4dc0de2e8a278f87c7129
Module:Effective protection level
828
84
388
185
2023-06-06T09:19:12Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Effective_protection_level]]: w
Scribunto
text/plain
local p = {}
-- Returns the permission required to perform a given action on a given title.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local level = mw.ext.FlaggedRevs.getStabilitySettings(title)
level = level and level.autoreview
if level == 'review' then
return 'reviewer'
elseif level ~= '' then
return level
else
return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review
end
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then
error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 )
end
if title.namespace == 8 then -- MediaWiki namespace
if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
return 'interfaceadmin'
else -- any non-JS/CSS MediaWiki page
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- user JSON page
return 'sysop'
end
end
if action == 'undelete' then
return 'sysop'
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page
return 'sysop'
elseif level == 'templateeditor' then
return 'templateeditor'
elseif action == 'move' then
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif title.namespace == 6 then
return 'filemover'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
end
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'autoconfirmed'
elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts
return 'user'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
70256a489edf6be9808031b14a7e3ef3e025da97
Template:Documentation
10
15
390
239
2023-06-06T09:19:33Z
Otonashi Ayana
2
1 revision imported from [[:meta:Template:Documentation]]: w
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude>
{{documentation|content=
{{Lua|Module:Documentation}}
<translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate>
<translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate>
<translate>
==Usage== <!--T:2-->
===Customizing display=== <!--T:3-->
<!--T:4-->
Overrides exist to customize the output in special cases:
</translate>
* <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate>
<translate>
==Rationale== <!--T:6-->
</translate>
<translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate>
<translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate>
<translate>
==See also== <!--T:9-->
</translate>
* <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate>
* {{tim|Documentation}}
* <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate>
}}
[[Category:Formatting templates{{#translation:}}|Template documentation]]
[[Category:Template documentation{{#translation:}}| ]]
</noinclude><includeonly>{{#if:{{{content|}}}|
[[Category:Template documentation pages{{#translation:}}]]
}}</includeonly>
e9a25c87d40f5882dd425c83ed4d3be628082f3c
Module:Yesno
828
12
392
133
2023-06-06T09:19:34Z
Otonashi Ayana
2
1 revision imported from [[:meta:Module:Yesno]]: w
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
Module:Arguments
828
13
394
135
2023-06-06T09:19:34Z
Otonashi Ayana
2
1 revision imported from [[:meta:Module:Arguments]]: w
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Module:Message box
828
11
396
141
2023-06-06T09:19:34Z
Otonashi Ayana
2
1 revision imported from [[:meta:Module:Message_box]]: w
Scribunto
text/plain
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
fcf2586b774e6db72e0a2837019f5b445124ddc4
Module:No globals
828
168
398
397
2023-06-06T09:19:35Z
Otonashi Ayana
2
1 revision imported from [[:meta:Module:No_globals]]: w
Scribunto
text/plain
local mt = getmetatable(_G) or {}
function mt.__index (t, k)
if k ~= 'arg' then
-- perf optimization here and below: do not load Module:TNT unless there is an error
error(require('Module:TNT').format('I18n/No globals', 'err-read', tostring(k)), 2)
end
return nil
end
function mt.__newindex(t, k, v)
if k ~= 'arg' then
error(require('Module:TNT').format('I18n/No globals', 'err-write', tostring(k)), 2)
end
rawset(t, k, v)
end
setmetatable(_G, mt)
efcb47c74e7e2bb9a4ad8764d99a0afce8fed410
Module:Documentation
828
25
400
241
2023-06-06T09:19:35Z
Otonashi Ayana
2
1 revision imported from [[:meta:Module:Documentation]]: w
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local i18n = mw.loadData('Module:Documentation/i18n')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4)
end
local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
return ret
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Load TemplateStyles
----------------------------------------------------------------------------
p.main = function(frame)
local parent = frame.getParent(frame)
local output = p._main(parent.args)
return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output
end
----------------------------------------------------------------------------
-- Main function
----------------------------------------------------------------------------
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--
-- Messages:
-- 'main-div-id' --> 'template-documentation'
-- 'main-div-classes' --> 'template-documentation iezoomfix'
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
-- This div tag is from {{documentation/start box}}, but moving it here
-- so that we don't have to worry about unclosed tags.
:tag('div')
:attr('id', message('main-div-id'))
:addClass(message('main-div-class'))
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:done()
:wikitext(p._endBox(args, env))
:wikitext(p.addTrackingCategories(env))
return tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title objects and other namespace- or
-- path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
-- env.printTitle - the print version of the template, located at the /Print subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.printTitle()
--[[
-- Title object for the /Print subpage.
-- Messages:
-- 'print-subpage' --> 'Print'
--]]
return env.templateTitle:subPageTitle(message('print-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the same as the
-- subject namespace. However, pages in the Article, File, MediaWiki or Category
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local frame = mw.getCurrentFrame()
local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed.
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if isPreviewing or not compareUrl then
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
else
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
text = text .. makeCategoryLink(message('sandbox-category'))
omargs.text = text
omargs.class = message('sandbox-class')
local ret = '<div style="clear: both;"></div>'
ret = ret .. messageBox.main('ombox', omargs)
return ret
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local title = env.title
local protectionLevels
local protectionTemplate = message('protection-template')
local namespace = title.namespace
if not (protectionTemplate and (namespace == 10 or namespace == 828)) then
-- Don't display the protection template if we are not in the template or module namespaces.
return nil
end
protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editLevels = protectionLevels.edit
local moveLevels = protectionLevels.move
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then
-- The page is full-move protected, or full, template, or semi-protected.
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = i18n['view-link-display']
data.editLinkDisplay = i18n['edit-link-display']
data.historyLinkDisplay = i18n['history-link-display']
data.purgeLinkDisplay = i18n['purge-link-display']
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 6 then -- File namespace
preload = message('file-docpage-preload')
elseif subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = i18n['create-link-display']
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities.
s = s:gsub('%]', ']')
return s
end
local ret
local docTitle = data.docTitle
local title = data.title
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
-- 'start-box-link-id' --> 'doc_editlinks'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = i18n['template-namespace-heading']
elseif subjectSpace == 828 then -- Module namespace
data.heading = i18n['module-namespace-heading']
elseif subjectSpace == 6 then -- File namespace
data.heading = i18n['file-namespace-heading']
else
data.heading = i18n['other-namespaces-heading']
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
data.linksClass = message('start-box-linkclasses')
data.linksId = message('start-box-link-id')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
:addClass(message('header-div-class'))
:tag('div')
:addClass(message('heading-div-class'))
:wikitext(data.heading)
local links = data.links
if links then
sbox
:tag('div')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
local cbox = mw.html.create('div')
cbox
:addClass(message('content-div-class'))
:wikitext('\n' .. (content or '') .. '\n')
return tostring(cbox)
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the footer text field.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '')
text = text .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.
if printBlurb then
text = text .. '<br />' .. printBlurb
end
end
end
local ebox = mw.html.create('div')
ebox
:addClass(message('footer-div-class'))
:wikitext(text)
return tostring(ebox)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[w:Wikipedia:Template documentation|documentation]]
-- is [[w:Wikipedia:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle or args.content then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = i18n['edit-link-display']
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = i18n['history-link-display']
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = i18n['create-link-display']
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
function p.makePrintBlurb(args, env)
--[=[
-- Generates the blurb displayed when there is a print version of the template available.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'print-link-display' --> '/Print'
-- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]'
-- .. ' of this template exists at $1.'
-- .. ' If you make a change to this template, please update the print version as well.'
-- 'display-print-category' --> true
-- 'print-category' --> 'Templates with print versions'
--]=]
local printTitle = env.printTitle
if not printTitle then
return nil
end
local ret
if printTitle.exists then
local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))
ret = message('print-blurb', {printLink})
local displayPrintCategory = message('display-print-category', nil, 'boolean')
if displayPrintCategory then
ret = ret .. makeCategoryLink(message('print-category'))
end
end
return ret
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
0e23eec0d3c20c23afcd28849e240b9083dbcf88
Module:Documentation/config
828
26
402
243
2023-06-06T09:19:35Z
Otonashi Ayana
2
1 revision imported from [[:meta:Module:Documentation/config]]: w
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local _format = require('Module:TNT').format
local function format(id)
return _format('I18n/Documentation', id)
end
local cfg = {} -- Do not edit this line.
cfg['templatestyles-scr'] = 'Module:Documentation/styles.css'
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-template']
-- The name of the template that displays the protection icon (a padlock on enwiki).
cfg['protection-template'] = 'pp-template'
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
-- cfg['protection-template-args']
-- Any arguments to send to the protection template. This should be a Lua table.
-- For example, if the protection template is "pp-template", and the wikitext template invocation
-- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}".
--]]
cfg['protection-template-args'] = {docusage = 'yes'}
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template')
cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module')
cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other')
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb')
cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb')
cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display')
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb')
cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display')
cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb')
cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display')
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = format('transcluded-from-blurb')
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = format('create-module-doc-blurb')
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = format('experiment-blurb-template')
cfg['experiment-blurb-module'] = format('experiment-blurb-module')
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = format('sandbox-link-display')
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display')
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = format('sandbox-create-link-display')
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = format('compare-link-display')
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = format('mirror-link-display')
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = format('testcases-link-display')
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = format('testcases-edit-link-display')
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = format('testcases-create-link-display')
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = format('add-categories-blurb')
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = format('subpages-blurb')
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = format('subpages-link-display')
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = format('template-pagetype')
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = format('module-pagetype')
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = format('default-pagetype')
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['file-docpage-preload']
-- Preload file for documentation page in the file namespace.
cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- Print version configuration
----------------------------------------------------------------------------------------------------
-- cfg['print-subpage']
-- The name of the template subpage used for print versions.
cfg['print-subpage'] = 'Print'
-- cfg['print-link-display']
-- The text to display when linking to the /Print subpage.
cfg['print-link-display'] = '/Print'
-- cfg['print-blurb']
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display'].
cfg['print-blurb'] = format('print-blurb')
-- cfg['display-print-category']
-- Set to true to enable output of cfg['print-category'] if a /Print subpage exists.
-- This should be a boolean value (either true or false).
cfg['display-print-category'] = true
-- cfg['print-category']
-- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists.
cfg['print-category'] = 'Templates with print versions'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['main-div-id']
-- The "id" attribute of the main HTML "div" tag.
cfg['main-div-id'] = 'template-documentation'
-- cfg['main-div-classes']
-- The CSS classes added to the main HTML "div" tag.
cfg['main-div-class'] = 'ts-doc-doc'
cfg['header-div-class'] = 'ts-doc-header'
cfg['heading-div-class'] = 'ts-doc-heading'
cfg['content-div-class'] = 'ts-doc-content'
cfg['footer-div-class'] = 'ts-doc-footer plainlinks'
cfg['sandbox-class'] = 'ts-doc-sandbox'
-- cfg['start-box-linkclasses']
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.
cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks'
-- cfg['start-box-link-id']
-- The HTML "id" attribute for the links in the start box.
cfg['start-box-link-id'] = 'doc_editlinks'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = false
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
224f3664a83268936f1b9935eafc0055a97071ac
Module:TNT
828
27
404
54
2023-06-06T09:19:36Z
Otonashi Ayana
2
1 revision imported from [[:meta:Module:TNT]]: w
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
params[k - 2] = mw.text.trim(v)
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
function p.getTemplateData(dataset)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
local names = {}
for _, field in ipairs(data.schema.fields) do
table.insert(names, field.name)
end
local numOnly = true
local params = {}
local paramOrder = {}
for _, row in ipairs(data.data) do
local newVal = {}
local name = nil
for pos, columnName in ipairs(names) do
if columnName == 'name' then
name = row[pos]
else
newVal[columnName] = row[pos]
end
end
if name then
if (
(type(name) ~= "number")
and (
(type(name) ~= "string")
or not string.match(name, "^%d+$")
)
) then
numOnly = false
end
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
if numOnly then
params['zzz123']=''
end
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description,
})
if numOnly then
json = string.gsub(json,'"zzz123":"",?', "")
end
return json
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error(string.format([['''Missing JsonConfig extension, or not properly configured;
Cannot load https://commons.wikimedia.org/wiki/Data:%s.
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset))
end
local data = mw.ext.data.get(dataset, lang)
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
e8ec673cd9d57a37a2bc326979c7980f1657fc3a
Template:Infobox character
10
2
405
314
2023-06-06T09:21:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
{{documentation}}
4d6921423c2a987f31e46b685f3b1fb6d898b5f8
407
405
2023-06-06T09:27:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}}
| header1 = Character Information {{#var:given}}
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
{{documentation}}
37fff5960967031db754dc32b894c3c3679cbb78
408
407
2023-06-06T09:29:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}} {{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}
| header1 = Character Information {{#var:given}}
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
{{documentation}}
91a352fcabe09139a4c4fa577e13630a2917b40a
409
408
2023-06-06T09:29:54Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}} {{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
{{documentation}}
1cc9281ac9799cb90ae69c9ec763005eadfbd5a8
411
409
2023-06-06T09:41:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}</onlyinclude>
{{documentation}}
dcfeaf749f81306d653c22f132c3eb9cf4f13794
412
411
2023-06-06T09:42:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>
{{documentation}}
21af6dcdc33c2d3230cb5b1403ca5b0c528ec5d7
413
412
2023-06-06T09:43:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}}</onlyinclude>
{{documentation}}
08f9c696b8b05ec3400326cca50046d9eed31e33
414
413
2023-06-06T09:44:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}}}}</onlyinclude>
{{documentation}}
335695dfc29cb52f7733bc4a1c03206bac7b9015
415
414
2023-06-06T09:44:41Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude><includeonly>{{DISPLAYTITLE:{{character name}}}}</includeonly>
{{documentation}}
4ec80812d12f6d841426d584969b093eacefc743
417
415
2023-06-06T09:48:04Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}</onlyinclude>{{DISPLAYTITLE:{{character name}}}}
{{documentation}}
08359d3e7d75ccec65a39a632c14d5109fbfba1f
418
417
2023-06-06T09:51:44Z
Otonashi Ayana
2
wikitext
text/x-wiki
<onlyinclude>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}} }}</onlyinclude>
{{documentation}}
d08555c97a2dec20117e845aca0658b4d6d03326
419
418
2023-06-06T09:52:56Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}} }}</includeonly>
{{documentation}}
7bcdcf5a5ffdf814ad5b7cd8915fff6f40c6d47f
420
419
2023-06-06T09:53:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
68a03a13d06cf403edae07ad23b89f2e4ae1c0eb
Template:Infobox character/doc
10
169
406
2023-06-06T09:21:52Z
Otonashi Ayana
2
Created page with "<pre> {{infobox character | name = | given name = | family name = | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre>"
wikitext
text/x-wiki
<pre>
{{infobox character
| name =
| given name =
| family name =
| jname =
| image =
| aka =
| gender =
| age =
| appearance =
| seiyu =
| relations =
}}</pre>
8543f3542ba55b80acc478a33a659152e1de8eb9
421
406
2023-06-06T09:54:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
<pre>
{{infobox character
| given name =
| family name =
| jname =
| image =
| aka =
| gender =
| age =
| appearance =
| seiyu =
| relations =
}}</pre>
0e8e9f89510f80f2ba5d10a7c32870c7ec431194
Template:Character name
10
170
410
2023-06-06T09:37:54Z
Otonashi Ayana
2
Created page with "<span class="given-name">{{#var:given}}</span> <span class="family-name">{{#var:family}}</span>"
wikitext
text/x-wiki
<span class="given-name">{{#var:given}}</span> <span class="family-name">{{#var:family}}</span>
539f9f28d382db763cfd3d37fd6395aab4481f81
416
410
2023-06-06T09:46:16Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span>
20bc781f8c3d4ca1127d7ea0ce01714b77ad279d
422
416
2023-06-06T09:57:02Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
2c49e49c0d5f7b1e6f2175b0af2788db97b8878c
423
422
2023-06-06T09:57:27Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span style="display:flex; gap:1em"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
679587cb9b25f9e964b3dfa9a81a62d51ca4b9de
424
423
2023-06-06T10:00:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
c6f268839a856abf7d96d110b09d4f07dcfd223f
426
424
2023-06-06T10:02:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="character-name" style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
be185467dc281cc4a9c49bf8d4aae262fbeeb48f
431
426
2023-06-06T10:06:59Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
c6f268839a856abf7d96d110b09d4f07dcfd223f
MediaWiki:Gadgets-definition
8
46
425
122
2023-06-06T10:01:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
* name-order | name-order.css
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
0555cfd677601e9e94871e9045271f6a732f2c85
429
425
2023-06-06T10:05:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
* name-order | default | name-order.css
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
ed4e7b3d8cb90296835be32ab88c7e3dda278b39
430
429
2023-06-06T10:05:59Z
Otonashi Ayana
2
wikitext
text/x-wiki
* name-order [default] | name-order.css
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
4f818277583f3521aaf59a8b31736fe95fcf2f85
MediaWiki:Gadget-name-order.css
8
171
427
2023-06-06T10:03:22Z
Otonashi Ayana
2
Created page with ".character-name{ flex-direction:row-reverse; }"
css
text/css
.character-name{
flex-direction:row-reverse;
}
7be89c893ff7b48e18c1a71cc7bcf0533aa009d4
432
427
2023-06-06T10:07:47Z
Otonashi Ayana
2
css
text/css
.given-name{
order: 1;
}
.family-name{
order: 2;
}
60da10cc360b4ceca69533c5a56b1d5c21b8a82e
433
432
2023-06-06T10:09:41Z
Otonashi Ayana
2
Blanked the page
css
text/css
da39a3ee5e6b4b0d3255bfef95601890afd80709
MediaWiki:Gadget-name-order
8
172
428
2023-06-06T10:03:52Z
Otonashi Ayana
2
Created page with "Use Western name order"
wikitext
text/x-wiki
Use Western name order
148747f02732a55f40f67686a1f6b2c505a486b5
Template:Character name
10
170
434
431
2023-06-06T10:10:30Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span>
4f453885871df2c5e0d37275b9619556774f16b6
435
434
2023-06-06T10:11:06Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
c6f268839a856abf7d96d110b09d4f07dcfd223f
436
435
2023-06-06T10:12:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span style="display:inline-flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
edb0c8a4582692dc2432bc43264d177a928b8905
437
436
2023-06-06T10:12:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="character name" style="display:inline-flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
6ab5377afae25d3a1e5159be22e31d9c71f2b85d
439
437
2023-06-06T10:13:25Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="character-name" style="display:inline-flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span>
ddb01a7b749d580e13c3b857296133d72be08e71
442
439
2023-06-06T10:24:59Z
Kinzo
4
wikitext
text/x-wiki
{{ charname
| {{#var:family}}
| {{#var:given}}
}}
59b33a0f53ba0326815a72326434d6d34ae2ceb8
443
442
2023-06-06T10:25:41Z
Kinzo
4
wikitext
text/x-wiki
{{charname|{{#var:family}}|{{#var:given}}}}
6f0e1c5d8ef6d8c292ae5d8840961896a8a02475
449
443
2023-06-06T10:39:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{charname|{{#var:given}}|{{#var:family}}}}
bb32ea62d62c6cb747710fe8c624a7a9c0843be1
MediaWiki:Gadget-name-order.css
8
171
438
433
2023-06-06T10:13:01Z
Otonashi Ayana
2
css
text/css
.character-name{
flex-direction:row-reverse;
}
7be89c893ff7b48e18c1a71cc7bcf0533aa009d4
440
438
2023-06-06T10:18:32Z
Otonashi Ayana
2
css
text/css
.character-name{
display: flex;
flex-direction: row-reverse;
}
1bf352086eec81dc123a25cea14772bee4e27d72
447
440
2023-06-06T10:38:14Z
Otonashi Ayana
2
css
text/css
.character-name{
display: flex;
flex-direction: row !important;
}
4589accf69364054905e79cf65fb4d1cf9e80beb
450
447
2023-06-06T10:39:55Z
Otonashi Ayana
2
Undo revision 447 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
css
text/css
.character-name{
display: flex;
flex-direction: row-reverse;
}
1bf352086eec81dc123a25cea14772bee4e27d72
Template:Charname
10
173
441
2023-06-06T10:24:10Z
Kinzo
4
Created page with "<span class="character-name" style="display:inline-flex"><span class="family-name">{{{1}}}</span> <span class="given-name">{{{2|}}}</span></span>"
wikitext
text/x-wiki
<span class="character-name" style="display:inline-flex"><span class="family-name">{{{1}}}</span> <span class="given-name">{{{2|}}}</span></span>
8406f8085531ee647e94f174f5ef07765df2d337
444
441
2023-06-06T10:26:28Z
Kinzo
4
wikitext
text/x-wiki
<span class="character-name" style="display:inline-flex"><span class="family-name">{{{1}}}</span> <span class="given-name">{{{2|}}}</span></span>
cd50b865091a342de15cddceade8ea08e2bc0010
448
444
2023-06-06T10:39:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="character-name" style="display:inline-flex"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span>
64694ae0169cab89790415227fd7147d7a961c32
MediaWiki:Gadgets-definition
8
46
445
430
2023-06-06T10:32:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
* name-order [default] | western-order
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
2599897acf2a87a1d54f5514010322e39ed69640
446
445
2023-06-06T10:36:11Z
Otonashi Ayana
2
Undo revision 445 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
wikitext
text/x-wiki
* name-order [default] | name-order.css
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
4f818277583f3521aaf59a8b31736fe95fcf2f85
451
446
2023-06-06T10:44:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
* name-order | name-order.css
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
0555cfd677601e9e94871e9045271f6a732f2c85
MediaWiki:Gadget-name-order
8
172
452
428
2023-06-06T10:44:30Z
Otonashi Ayana
2
wikitext
text/x-wiki
Use Japanese name order
b02a126cd3f0aeb0e53b2de05a285ce81f2713ce
Template:Infobox character
10
2
453
420
2023-06-06T10:49:15Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{subst:character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
00f598e8a4950f2600e3c7de9b84d2cf0cb151b9
454
453
2023-06-06T10:50:16Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{subst:character name}}</includeonly>
<noinclude>{{documentation}}</noinclude>
f07a5896428295ccb2ca39166f40eb5d8a524271
455
454
2023-06-06T10:52:00Z
Otonashi Ayana
2
Undo revision 454 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{safesubst:character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
7cb6837958777e41e8272d73ab5a95fb4b9a4e7d
456
455
2023-06-06T10:52:41Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information {{safesubst:character name}}
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{safesubst:character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
9128ad08eaf6f0e2070b245bdd25ee67d64caf88
457
456
2023-06-06T10:55:26Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information {{safesubst:character name}}
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:test }}</includeonly>
<noinclude>{{documentation}}</noinclude>
400d1fd86ee5864bd38b55bbac22e5f72c703fce
458
457
2023-06-06T10:59:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information {{safesubst:character name}}
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{|safesubst:character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
667b9e0e5eb99eb7985384fa8624872c71356b4e
459
458
2023-06-06T10:59:18Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information {{safesubst:character name}}
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{safesubst:character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
9128ad08eaf6f0e2070b245bdd25ee67d64caf88
460
459
2023-06-06T11:12:32Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
68a03a13d06cf403edae07ad23b89f2e4ae1c0eb
Template:N
10
174
461
2023-06-06T11:14:27Z
Otonashi Ayana
2
Created page with "[[{{{1}}} {{{2}}}]]"
wikitext
text/x-wiki
[[{{{1}}} {{{2}}}]]
4de9e4ca756a8dc68a96f281ee09ecd703e145d8
462
461
2023-06-06T11:15:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
[[{{{given}}} {{{family}}}]]
ddd5d40c88fcd9e6a3749671987b9d46f0c6f576
463
462
2023-06-06T11:16:12Z
Otonashi Ayana
2
Undo revision 462 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
wikitext
text/x-wiki
[[{{{1}}} {{{2}}}]]
4de9e4ca756a8dc68a96f281ee09ecd703e145d8
464
463
2023-06-06T11:16:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
[[{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}]]
e9f98f790f2c7896bc4d2918289a8ab88526c046
465
464
2023-06-06T11:16:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
[[{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}]]
24b617b3462b7070ea0f183d6e746d576b7aa33a
Template:Kns characters
10
138
466
322
2023-06-06T11:20:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}}
| state = uncollapsed
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Kara no Shōjo]]
[[Category:Characters]]
</includeonly>
76779e2d6c8ff1e5f6b9daf162b9150ca2e8cb2a
File:Cover kara no shoujo.png
6
175
467
2023-06-06T11:35:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Cover kara no shoujo 2.jpg
6
176
468
2023-06-06T11:36:19Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Cover kara no shoujo 3.png
6
177
469
2023-06-06T11:36:32Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Cover cartagra.png
6
178
470
2023-06-06T11:36:48Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
MediaWiki:Common.css
8
7
471
13
2023-06-06T11:40:41Z
Otonashi Ayana
2
css
text/css
.main-page-display{
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
17a16a534b8e06a3961f6d433a01bfff1a105bb9
472
471
2023-06-06T11:41:26Z
Otonashi Ayana
2
css
text/css
.main-page-display{
display: flex;
flex-direction: column;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
0ed1dafddd4c860d180d22beeac06cb03d0f4baa
473
472
2023-06-06T11:43:20Z
Otonashi Ayana
2
css
text/css
.main-page-display{
display: flex;
flex-direction: column;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display img{
object-fit: cover;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
966b0541ed867943e69de50dd28692c3423621d2
474
473
2023-06-06T11:44:11Z
Otonashi Ayana
2
css
text/css
.main-page-display{
display: flex;
flex-direction: column;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display img{
object-fit: contain;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
4a9cd1de50f36caead8bc4ebbda352e8845abb30
476
474
2023-06-06T11:51:49Z
Otonashi Ayana
2
css
text/css
.main-page-display{
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display img{
object-fit: contain;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
ccaecb0240b89ea65edc32eb90ecb8ea8ad8f2cb
478
476
2023-06-06T11:52:21Z
Otonashi Ayana
2
css
text/css
.main-page-display{
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
gap: 1em;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display img{
object-fit: contain;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
4d1ad95c300d429158fe828a54ed52be27fdc987
479
478
2023-06-06T11:54:21Z
Otonashi Ayana
2
css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
gap: 1em;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > *{
height:100%;
width:100%;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
929965b6c2c71b918703b33ff013002d5b4966a6
480
479
2023-06-06T11:54:55Z
Otonashi Ayana
2
css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > *{
height:100%;
width:100%;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
d01ce86134ed875628181f04275700e595b6ef37
483
480
2023-06-06T11:59:08Z
Otonashi Ayana
2
css
text/css
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
db112051df4a651c718e6bb55829dc832e41d60f
Main Page
0
1
475
1
2023-06-06T11:46:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
== Games ==
<div style="display:flex;flex-direction:row;gap:50px">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
462e839f4a07b716886097ae49cb8299794af444
477
475
2023-06-06T11:51:55Z
Otonashi Ayana
2
wikitext
text/x-wiki
== Games ==
<div style="display:flex">
<div class="main-page-display">
<span>[[File:cover cartagra.png]]</span>
<span>Cartagra</span>
</div>
<div class="main-page-display">
<span>[[File:cover kara no shoujo.png]]</span>
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
<span>[[File:cover kara no shoujo 2.jpg]]</span>
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
<span>[[File:cover kara no shoujo 3.png]]</span>
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
dd18927e1e9f5cdcf794807191f91fc59353ee58
481
477
2023-06-06T11:55:00Z
Otonashi Ayana
2
Undo revision 477 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
wikitext
text/x-wiki
== Games ==
<div style="display:flex;flex-direction:row;gap:1em">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
5d2291721418c3c8a81fa41bbbc734d23b3d08ff
482
481
2023-06-06T11:56:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
= Games =
<div style="display:flex;flex-direction:row;gap:1em">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
4dde36993e0c348fb15277efd6f8dde1b5802d6e
Template:Main Page/styles.css
10
179
484
2023-06-06T12:00:14Z
Otonashi Ayana
2
Created page with ".main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > *{ height:100%; width:100%; }"
wikitext
text/x-wiki
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > *{
height:100%;
width:100%;
}
e3387635046df60f5500382a65b76cfa18604fad
485
484
2023-06-06T12:00:49Z
Otonashi Ayana
2
Otonashi Ayana changed the content model of the page [[Main Page/styles.css]] from "wikitext" to "Sanitized CSS": w
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > *{
height:100%;
width:100%;
}
e3387635046df60f5500382a65b76cfa18604fad
489
485
2023-06-06T12:07:28Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Main Page/styles.css]] to [[Template:Main Page/styles.css]] without leaving a redirect
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > *{
height:100%;
width:100%;
}
e3387635046df60f5500382a65b76cfa18604fad
491
489
2023-06-06T12:09:08Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
46800b91ee833240439b94ce4de7845b3dedf1e2
492
491
2023-06-06T12:11:10Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display img{
max-width:100%;
max-height:100%;
}
21a11f5c09ef10886a0b9cc7d9fa697b54088e9b
493
492
2023-06-06T12:12:37Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
db21871c2fa8c9066cdcd4bfeaa4141acb15a6dc
496
493
2023-06-06T12:22:47Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p,
.main-page-display a{
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
9f7daac6553ed7c4c4de73af6a07bb9d5d8fbf6e
497
496
2023-06-06T12:29:51Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 350px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
251849b395ab63b2f7c3ff0d6f42a630b5b761b4
498
497
2023-06-06T12:31:17Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
7b74253bc6b8674100c99feda160c7e9c8a824b3
500
498
2023-06-06T12:33:31Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
gap:1em;
margin: auto 0;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
e65c5c9d61710076b54d310a2990a099fff8d1ce
501
500
2023-06-06T12:36:20Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
margin: auto 0;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
947447f18df0a33bfb7fb4b8ebb923a78b2d4cce
502
501
2023-06-06T12:36:49Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
03c3e608d1fe157f974c3cc4067a7883cb4d8078
505
502
2023-06-06T12:40:25Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
z-index: 2;
color: white;
background-color: rgba(0,0,0,0.5);
}
0d52948891175653df22b13d36f6c50c389138af
506
505
2023-06-06T12:42:45Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
width: 100%;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.5);
}
8943c8e3a3b0300f2629634979bd1554c8e39792
510
506
2023-06-06T12:58:14Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
width: 100%;
text-align: center;
font-size: large;
color: white;
background-color: rgba(0,0,0,0.5);
}
fe15f03b8a0a372abe19d483c1b49147072d9331
511
510
2023-06-06T12:59:30Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
width: 100%;
height: 0;
text-align: center;
font-size: large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: height 1s ease;
}
.item-title:hover{
height: auto;
}
c833854b0fbea8de384e1e82d95a2737c65f062d
512
511
2023-06-06T13:00:56Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
width: 100%;
height: 0;
text-align: center;
font-size: large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: height 1s ease;
}
.main-page-display:hover .item-title{
height: auto;
}
1d2d172f118fcdc45e6dca40a49c4d65a9227a46
514
512
2023-06-06T13:05:34Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
width: 100%;
height: 0;
text-align: center;
font-size: large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: height 1s ease;
}
.main-page-display:hover .item-title{
height: auto;
}
e39d222e2af65845679f27233fe5dc2de6ea15a7
516
514
2023-06-06T13:06:20Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 1s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
9ad38319a650998b4fe2e0ab09dd459b8969cb27
517
516
2023-06-06T13:07:01Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
59b6009cfb6d37d8499950bee220301fba28ba34
518
517
2023-06-06T13:12:48Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: xx-large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
4174c0824c52c122da5fede01928c41499e4e705
519
518
2023-06-06T13:13:02Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: x-large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
c2165a10fc72ded9f3d392400513b9e66f71e3b3
520
519
2023-06-06T13:16:07Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
transition: height 0.5s ease, width 0.5s ease;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: x-large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
.main-page-display:hover img{
transform: scale(1.5);
}
aef52d187345396d92b874d13b01a5e017de6841
521
520
2023-06-06T13:19:19Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
transition: transform 0.5s ease;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: x-large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
.main-page-display:hover img{
transform: scale(1.19);
}
26e46869967575efe849f2d48dd7d3b69daefe86
522
521
2023-06-06T13:24:47Z
Otonashi Ayana
2
sanitized-css
text/css
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
transition: transform 0.5s ease;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: x-large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
.main-page-display:hover img{
transform: scale(1.05);
}
3cd849c9be1ea2dfadaf98b616751db3dcdcc67a
Main Page
0
1
486
482
2023-06-06T12:02:35Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div style="display:flex;flex-direction:row;gap:1em">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
02c7e48be3bfebfbfbd3f542a1a9de9e721ee694
487
486
2023-06-06T12:06:53Z
Otonashi Ayana
2
Replaced content with "{{Main Page}}"
wikitext
text/x-wiki
{{Main Page}}
80a17bbac1e39c330a04b3c5eda035540bbcbdb8
490
487
2023-06-06T12:07:59Z
Otonashi Ayana
2
Protected "[[Main Page]]" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))
wikitext
text/x-wiki
{{Main Page}}
80a17bbac1e39c330a04b3c5eda035540bbcbdb8
Template:Main Page
10
180
488
2023-06-06T12:07:01Z
Otonashi Ayana
2
Created page with "<templatestyles src="Main Page/styles.css /> = Games = <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display">..."
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div style="display:flex;flex-direction:row;gap:1em">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
02c7e48be3bfebfbfbd3f542a1a9de9e721ee694
494
488
2023-06-06T12:18:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div style="display:flex;flex-direction:row;gap:1em">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png|center]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
e95901c06fdbfed257c5b05d82a3074ad51f52a7
495
494
2023-06-06T12:20:54Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div style="display:flex;flex-direction:row;gap:1em">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
02c7e48be3bfebfbfbd3f542a1a9de9e721ee694
499
495
2023-06-06T12:32:27Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span>Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span>Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span>Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
713439e347a6bbe1096383a1db545990bd4afbff
503
499
2023-06-06T12:38:56Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span class="item title">Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span class="item title">Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span class="item title">Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span class="item title">Kara no Shōjo: The Last Episode</span>
</div>
</div>
cbc67eee910b907b962036fbf090195d4e90d70c
504
503
2023-06-06T12:39:19Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<span class="item-title">Cartagra</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<span class="item-title">Kara no Shōjo</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<span class="item-title">Kara no Shōjo: The Second Episode</span>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<span class="item-title">Kara no Shōjo: The Last Episode</span>
</div>
</div>
fbb756d34a508b3a9cb34cd1a74379da272a8229
507
504
2023-06-06T12:50:30Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<div class="item-title">
<span>Cartagra</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<div class="item-title">
<span>Kara no Shōjo</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<div class="item-title">
<span>Kara no Shōjo: The Second Episode</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<div class="item-title">
<span>Kara no Shōjo: The Last Episode</span>
</div>
</div>
</div>
5e71eaf9593aec6f6e7cd27f099f6c4e2bdefca5
508
507
2023-06-06T12:52:53Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<div class="item-title">
<span>Cartagra</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<div class="item-title">
<span>Kara no Shōjo</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<div class="item-title">
<span>Kara no Shōjo — The Second Episode</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<div class="item-title">
<span>Kara no Shōjo — The Last Episode</span>
</div>
</div>
</div>
87b00b11d55a4ba15a6f22bfdf2074f0496efd11
509
508
2023-06-06T12:53:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<div class="item-title">
<span>Cartagra</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<div class="item-title">
<span>Kara no Shōjo</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<div class="item-title">
<span>Kara no Shōjo<br>The Second Episode</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<div class="item-title">
<span>Kara no Shōjo<br>The Last Episode</span>
</div>
</div>
</div>
64a8f366f25435c4707309ed2b6e35fcd7c840b1
513
509
2023-06-06T13:04:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<div class="item-title">
Cartagra
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<div class="item-title">
<span>Kara no Shōjo</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<div class="item-title">
<span>Kara no Shōjo<br>The Second Episode</span>
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<div class="item-title">
<span>Kara no Shōjo<br>The Last Episode</span>
</div>
</div>
</div>
7bc051df5e5b81fb41ff079b933b868120d9e3c0
515
513
2023-06-06T13:05:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png]]
<div class="item-title">
Cartagra
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png]]
<div class="item-title">
Kara no Shōjo
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg]]
<div class="item-title">
Kara no Shōjo<br>The Second Episode
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png]]
<div class="item-title">
Kara no Shōjo<br>The Last Episode
</div>
</div>
</div>
9e352df8bb44dcc0019c3b93787334aa2e7498d8
526
515
2023-06-06T13:34:43Z
Otonashi Ayana
2
/* Games */
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png|link=Cartagra]]
<div class="item-title">
Cartagra
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png|link=Kara no Shoujo]]
<div class="item-title">
Kara no Shōjo
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]]
<div class="item-title">
Kara no Shōjo<br>The Second Episode
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]]
<div class="item-title">
Kara no Shōjo<br>The Last Episode
</div>
</div>
</div>
1162421465162032f69b716b849dec8d46dc33be
MediaWiki:Common.css
8
7
523
483
2023-06-06T13:25:42Z
Otonashi Ayana
2
css
text/css
.item-title{
pointer-events:none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
7cb02af93617a4311264f88c9090a44cdd582dce
Kara no Shoujo
0
181
524
2023-06-06T13:29:59Z
Otonashi Ayana
2
Created page with "{{DISPLAYTITLE:Kara no Shōjo}} '''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. It was first released on July 4, 2008."
wikitext
text/x-wiki
{{DISPLAYTITLE:Kara no Shōjo}}
'''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. It was first released on July 4, 2008.
df49267f6d7f2eff562ec2ee512df452f14f885b
525
524
2023-06-06T13:30:26Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}
'''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. It was first released on July 4, 2008.
21a31916193e0a5a008ba45c9d361857dce5d923
Kara no Shoujo - The Second Episode
0
182
527
2023-06-06T13:35:34Z
Otonashi Ayana
2
Created page with "{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}"
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}
00bf2f6d9f7b3ff7727c2b60c5935610fe5af336
Template:Italic title
10
184
530
529
2023-06-06T13:37:00Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Italic_title]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Italic title|main}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata. -->
</noinclude>
aa77d0fbc6bb86266d633b290b7ab258cc69c8b8
Template:T
10
185
532
531
2023-06-06T13:37:11Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:T]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Rcat shell|
{{R from template shortcut}}
}}
<!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta -->
bb10dbc83695404528dbc095ea267429142c7f05
Template:Template link general
10
186
534
533
2023-06-06T13:37:12Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_link_general]]: w
wikitext
text/x-wiki
{{{{{|safesubst:}}}#Invoke:Template link general|main}}<noinclude>
{{Documentation}}
</noinclude>
9871d2f490eaedd832a0ae8016adbf807ddf7b71
Template:Tlg
10
187
536
535
2023-06-06T13:37:12Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tlg]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link general]]
{{Redirect category shell|
{{R from move}}
}}
707ce913a3ffa8193c9377c3ded7db7b72407500
Template:Tlp
10
188
538
537
2023-06-06T13:37:13Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tlp]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link with parameters]]
{{R from move}}
3867e4ef4fe637ce8530859b5486b23e916d0b8a
Template:Template link with parameters
10
189
540
539
2023-06-06T13:37:14Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_link_with_parameters]]: w
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nowrap=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlp}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
8fe73a6eea633360a927820d10469b7292bfc1c2
Module:Transclusion count/data/I
828
190
542
541
2023-06-06T13:37:18Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Transclusion_count/data/I]]: w
Scribunto
text/plain
return {
["IAAF_name"] = 2200,
["IAST"] = 5900,
["IBDB_name"] = 9100,
["ICD10"] = 4600,
["ICD9"] = 4400,
["ICS"] = 2900,
["IDN"] = 3300,
["IMDb_episode"] = 9800,
["IMDb_episodes"] = 2500,
["IMDb_name"] = 152000,
["IMDb_title"] = 187000,
["IMO_Number"] = 4100,
["IMSLP"] = 8200,
["INA"] = 2100,
["IND"] = 7400,
["INR"] = 6200,
["INRConvert"] = 5500,
["INRConvert/CurrentRate"] = 5400,
["INRConvert/USD"] = 5400,
["INRConvert/out"] = 5400,
["IOC_profile"] = 5600,
["IP"] = 2600,
["IPA"] = 140000,
["IPA-all"] = 3500,
["IPA-de"] = 8000,
["IPA-es"] = 7800,
["IPA-fr"] = 44000,
["IPA-it"] = 5800,
["IPA-nl"] = 3700,
["IPA-pl"] = 4000,
["IPA-pt"] = 3600,
["IPA-ru"] = 2600,
["IPA-sh"] = 2700,
["IPA-sl"] = 6900,
["IPA-th"] = 2900,
["IPA_audio_link"] = 19000,
["IPA_link"] = 3400,
["IPAc-cmn"] = 2600,
["IPAc-en"] = 48000,
["IPAc-pl"] = 52000,
["IPC_athlete"] = 2600,
["IPSummary"] = 77000,
["IP_summary"] = 78000,
["IPsock"] = 9300,
["IPtalk"] = 22000,
["IPuser"] = 6900,
["IPvandal"] = 2900,
["IRC"] = 6500,
["IRI"] = 2200,
["IRL"] = 5400,
["IRN"] = 3500,
["ISBN"] = 461000,
["ISBNT"] = 38000,
["ISBN_missing"] = 2300,
["ISFDB_name"] = 4100,
["ISFDB_title"] = 4500,
["ISL"] = 2100,
["ISO_15924/script-example-character"] = 2800,
["ISO_15924/wp-article"] = 2800,
["ISO_15924/wp-article/format"] = 2800,
["ISO_15924/wp-article/label"] = 2700,
["ISO_3166_code"] = 509000,
["ISO_3166_name"] = 16000,
["ISO_639_name"] = 7900,
["ISP"] = 5400,
["ISR"] = 4700,
["ISSN"] = 12000,
["ISSN_link"] = 30000,
["ISTAT"] = 8100,
["ISU_figure_skater"] = 2500,
["ITA"] = 17000,
["ITF"] = 6100,
["ITF_profile"] = 9000,
["ITIS"] = 4300,
["ITN_talk"] = 9800,
["ITN_talk/date"] = 9800,
["IUCN_banner"] = 15000,
["I_sup"] = 4500,
["Iaaf_name"] = 7400,
["Ice_hockey"] = 19000,
["Ice_hockey_stats"] = 16000,
["Icehockeystats"] = 12000,
["Icon"] = 572000,
["If"] = 265000,
["If_all"] = 6000,
["If_between"] = 3700,
["If_both"] = 8250000,
["If_empty"] = 3670000,
["If_first_display_both"] = 73000,
["If_in_page"] = 8800,
["If_last_display_both"] = 30000,
["If_preview"] = 57000,
["If_then_show"] = 278000,
["Ifempty"] = 4000,
["Ifeq"] = 16000,
["Iferror_then_show"] = 3200,
["Ifexist_not_redirect"] = 1110000,
["Ifnotempty"] = 14000,
["Ifnumber"] = 34000,
["Ifsubst"] = 97000,
["Ih"] = 7500,
["Ill"] = 109000,
["Illm"] = 6800,
["Image_frame"] = 3800,
["Image_label"] = 4500,
["Image_label_begin"] = 3800,
["Image_label_end"] = 3500,
["Image_label_small"] = 2600,
["Image_needed"] = 4500,
["Image_other"] = 279000,
["Image_requested"] = 170000,
["Image_requested/Category_helper"] = 163000,
["Imbox"] = 915000,
["Imdb_name"] = 5300,
["Imdb_title"] = 4200,
["Import_style"] = 11000,
["Import_style/inputbox.css"] = 11000,
["Importance"] = 5530000,
["Importance/colour"] = 5550000,
["Importance_mask"] = 8610000,
["Improve_categories"] = 6800,
["Improve_documentation"] = 2000,
["In_class"] = 5600,
["In_lang"] = 352000,
["In_progress"] = 3100,
["In_string"] = 71000,
["In_title"] = 19000,
["Inactive_WikiProject_banner"] = 216000,
["Inactive_userpage_blanked"] = 4900,
["Include-USGov"] = 29000,
["Incomplete_list"] = 22000,
["Inconclusive"] = 2100,
["Increase"] = 42000,
["Incumbent_pope"] = 4300,
["Indent"] = 4200,
["IndexFungorum"] = 2300,
["Indian_English"] = 4200,
["Indian_Rupee"] = 10000,
["Indian_railway_code"] = 3100,
["Inflation"] = 18000,
["Inflation-fn"] = 5300,
["Inflation-year"] = 4400,
["Inflation/IN/startyear"] = 5500,
["Inflation/UK"] = 4300,
["Inflation/UK/dataset"] = 4300,
["Inflation/UK/startyear"] = 4300,
["Inflation/US"] = 11000,
["Inflation/US/dataset"] = 11000,
["Inflation/US/startyear"] = 11000,
["Inflation/fn"] = 6100,
["Inflation/year"] = 23000,
["Info"] = 7200,
["Infobox"] = 3190000,
["Infobox/Columns"] = 2300,
["Infobox/mobileviewfix.css"] = 141000,
["Infobox3cols"] = 16000,
["Infobox_AFL_biography"] = 14000,
["Infobox_Aircraft_Begin"] = 5400,
["Infobox_Aircraft_Type"] = 4700,
["Infobox_Athletics_Championships"] = 2700,
["Infobox_Australian_place"] = 15000,
["Infobox_CFL_biography"] = 2200,
["Infobox_COA_wide"] = 3100,
["Infobox_Canada_electoral_district"] = 2400,
["Infobox_Canadian_Football_League_biography"] = 5800,
["Infobox_Canadian_Football_League_biography/position"] = 5700,
["Infobox_Chinese"] = 20000,
["Infobox_Chinese/Chinese"] = 2700,
["Infobox_Chinese/Footer"] = 8700,
["Infobox_Chinese/Header"] = 8700,
["Infobox_Chinese/Korean"] = 17000,
["Infobox_Christian_leader"] = 18000,
["Infobox_Election"] = 2200,
["Infobox_French_commune"] = 38000,
["Infobox_GAA_player"] = 2900,
["Infobox_Gaelic_games_player"] = 5000,
["Infobox_German_location"] = 13000,
["Infobox_German_place"] = 14000,
["Infobox_Grand_Prix_race_report"] = 2000,
["Infobox_Greece_place"] = 2800,
["Infobox_Greek_Dimos"] = 2800,
["Infobox_Hindu_temple"] = 2400,
["Infobox_Indian_constituency"] = 4500,
["Infobox_Indian_constituency/defaultdata"] = 4500,
["Infobox_Italian_comune"] = 8100,
["Infobox_Korean_name"] = 15000,
["Infobox_Korean_name/categories"] = 15000,
["Infobox_MLB_yearly"] = 3100,
["Infobox_NASCAR_race_report"] = 2100,
["Infobox_NCAA_team_season"] = 18000,
["Infobox_NFL_biography"] = 28000,
["Infobox_NFL_player"] = 8000,
["Infobox_NFL_season"] = 2500,
["Infobox_NFL_team_season"] = 3900,
["Infobox_NRHP"] = 72000,
["Infobox_NRHP/conv"] = 18000,
["Infobox_NRHP/locmapin2region"] = 66000,
["Infobox_Officeholder"] = 4900,
["Infobox_Olympic_event"] = 7300,
["Infobox_Olympic_event/games_text"] = 7300,
["Infobox_Paralympic_event"] = 2600,
["Infobox_Paralympic_event/games_text"] = 2600,
["Infobox_Politician"] = 2200,
["Infobox_Romanian_subdivision"] = 3100,
["Infobox_Russian_district"] = 2000,
["Infobox_Russian_inhabited_locality"] = 4400,
["Infobox_SCOTUS_case"] = 3700,
["Infobox_Site_of_Special_Scientific_Interest"] = 2000,
["Infobox_Swiss_town"] = 2800,
["Infobox_Switzerland_municipality"] = 2900,
["Infobox_Turkey_place"] = 12000,
["Infobox_U.S._county"] = 3000,
["Infobox_U.S._county/district"] = 3000,
["Infobox_UK_constituency"] = 2100,
["Infobox_UK_constituency/year"] = 2100,
["Infobox_UK_legislation"] = 2900,
["Infobox_UK_place"] = 25000,
["Infobox_UK_place/NoDialCode"] = 7900,
["Infobox_UK_place/NoPostCode"] = 3000,
["Infobox_UK_place/area"] = 2300,
["Infobox_UK_place/dist"] = 2500,
["Infobox_UK_place/local"] = 25000,
["Infobox_UK_place/styles.css"] = 25000,
["Infobox_UN_resolution"] = 2300,
["Infobox_US_Supreme_Court_case"] = 3800,
["Infobox_US_Supreme_Court_case/courts"] = 3800,
["Infobox_Wikipedia_user"] = 9500,
["Infobox_YouTube_personality"] = 2600,
["Infobox_YouTube_personality/styles.css"] = 2600,
["Infobox_academic"] = 13000,
["Infobox_aircraft_begin"] = 14000,
["Infobox_aircraft_occurrence"] = 2200,
["Infobox_aircraft_type"] = 12000,
["Infobox_airline"] = 4600,
["Infobox_airport"] = 15000,
["Infobox_airport/datatable"] = 15000,
["Infobox_album"] = 161000,
["Infobox_album/color"] = 189000,
["Infobox_album/link"] = 161000,
["Infobox_anatomy"] = 4400,
["Infobox_ancient_site"] = 5300,
["Infobox_animanga/Footer"] = 6700,
["Infobox_animanga/Header"] = 6700,
["Infobox_animanga/Print"] = 5400,
["Infobox_animanga/Video"] = 4600,
["Infobox_architect"] = 3600,
["Infobox_artist"] = 28000,
["Infobox_artist_discography"] = 5900,
["Infobox_artwork"] = 11000,
["Infobox_athlete"] = 3000,
["Infobox_automobile"] = 8400,
["Infobox_award"] = 13000,
["Infobox_badminton_player"] = 3200,
["Infobox_baseball_biography"] = 28000,
["Infobox_baseball_biography/style"] = 28000,
["Infobox_baseball_biography/styles.css"] = 28000,
["Infobox_basketball_biography"] = 20000,
["Infobox_basketball_biography/style"] = 20000,
["Infobox_basketball_club"] = 3000,
["Infobox_beauty_pageant"] = 2400,
["Infobox_bilateral_relations"] = 4300,
["Infobox_body_of_water"] = 18000,
["Infobox_book"] = 51000,
["Infobox_boxer"] = 5700,
["Infobox_bridge"] = 6000,
["Infobox_building"] = 27000,
["Infobox_character"] = 7700,
["Infobox_chess_biography"] = 3600,
["Infobox_chess_player"] = 3000,
["Infobox_church"] = 14000,
["Infobox_church/denomination"] = 14000,
["Infobox_church/font_color"] = 14000,
["Infobox_civil_conflict"] = 2300,
["Infobox_civilian_attack"] = 5300,
["Infobox_college_coach"] = 11000,
["Infobox_college_football_game"] = 2100,
["Infobox_college_sports_team_season"] = 39000,
["Infobox_college_sports_team_season/link"] = 39000,
["Infobox_college_sports_team_season/name"] = 39000,
["Infobox_college_sports_team_season/succession"] = 39000,
["Infobox_college_sports_team_season/team"] = 39000,
["Infobox_comic_book_title"] = 2900,
["Infobox_comics_character"] = 3600,
["Infobox_comics_creator"] = 3500,
["Infobox_comics_creator/styles.css"] = 3500,
["Infobox_company"] = 83000,
["Infobox_computing_device"] = 2300,
["Infobox_concert"] = 3200,
["Infobox_constituency"] = 5000,
["Infobox_country"] = 6300,
["Infobox_country/formernext"] = 5900,
["Infobox_country/imagetable"] = 5100,
["Infobox_country/multirow"] = 8100,
["Infobox_country/status_text"] = 2700,
["Infobox_country/styles.css"] = 6300,
["Infobox_country_at_games"] = 14000,
["Infobox_country_at_games/core"] = 14000,
["Infobox_country_at_games/see_also"] = 12000,
["Infobox_court_case"] = 4600,
["Infobox_court_case/images"] = 2400,
["Infobox_cricket_tournament"] = 2300,
["Infobox_cricketer"] = 32000,
["Infobox_cricketer/career"] = 32000,
["Infobox_cricketer/national_side"] = 7400,
["Infobox_criminal"] = 6200,
["Infobox_curler"] = 2600,
["Infobox_cycling_race_report"] = 4400,
["Infobox_cyclist"] = 16000,
["Infobox_dam"] = 5500,
["Infobox_designation_list"] = 19000,
["Infobox_designation_list/entry"] = 17000,
["Infobox_dim"] = 6900,
["Infobox_dim/core"] = 6900,
["Infobox_diocese"] = 3800,
["Infobox_drug"] = 9400,
["Infobox_drug/chemical_formula"] = 9500,
["Infobox_drug/data_page_link"] = 9400,
["Infobox_drug/formatATC"] = 9300,
["Infobox_drug/formatCASnumber"] = 9500,
["Infobox_drug/formatChEBI"] = 9500,
["Infobox_drug/formatChEMBL"] = 9500,
["Infobox_drug/formatChemDBNIAID"] = 9500,
["Infobox_drug/formatChemSpider"] = 9500,
["Infobox_drug/formatCompTox"] = 9500,
["Infobox_drug/formatDrugBank"] = 9500,
["Infobox_drug/formatIUPHARBPS"] = 9500,
["Infobox_drug/formatJmol"] = 9500,
["Infobox_drug/formatKEGG"] = 9500,
["Infobox_drug/formatPDBligand"] = 8800,
["Infobox_drug/formatPubChemCID"] = 9500,
["Infobox_drug/formatPubChemSID"] = 9500,
["Infobox_drug/formatUNII"] = 9500,
["Infobox_drug/legal_status"] = 9600,
["Infobox_drug/licence"] = 9500,
["Infobox_drug/maintenance_categories"] = 9500,
["Infobox_drug/non-ref-space"] = 3900,
["Infobox_drug/pregnancy_category"] = 9500,
["Infobox_drug/title"] = 9500,
["Infobox_election"] = 29000,
["Infobox_election/row"] = 29000,
["Infobox_election/shortname"] = 27000,
["Infobox_enzyme"] = 5100,
["Infobox_ethnic_group"] = 7100,
["Infobox_event"] = 5200,
["Infobox_family"] = 2100,
["Infobox_figure_skater"] = 4200,
["Infobox_film"] = 154000,
["Infobox_film/short_description"] = 150000,
["Infobox_film_awards"] = 2600,
["Infobox_film_awards/link"] = 2600,
["Infobox_film_awards/style"] = 2600,
["Infobox_food"] = 6800,
["Infobox_football_biography"] = 204000,
["Infobox_football_club"] = 27000,
["Infobox_football_club_season"] = 20000,
["Infobox_football_league"] = 2500,
["Infobox_football_league_season"] = 19000,
["Infobox_football_match"] = 5800,
["Infobox_football_tournament_season"] = 8000,
["Infobox_former_subdivision"] = 3300,
["Infobox_former_subdivision/styles.css"] = 3300,
["Infobox_galaxy"] = 2000,
["Infobox_game"] = 2400,
["Infobox_game_score"] = 3400,
["Infobox_gene"] = 13000,
["Infobox_given_name"] = 4000,
["Infobox_golfer"] = 4400,
["Infobox_golfer/highest_ranking"] = 4400,
["Infobox_government_agency"] = 10000,
["Infobox_government_cabinet"] = 2500,
["Infobox_gridiron_football_person"] = 2600,
["Infobox_gridiron_football_person/position"] = 5700,
["Infobox_gymnast"] = 3400,
["Infobox_handball_biography"] = 4900,
["Infobox_historic_site"] = 11000,
["Infobox_horseraces"] = 2600,
["Infobox_hospital"] = 6200,
["Infobox_hospital/care_system"] = 6200,
["Infobox_hospital/lists"] = 6200,
["Infobox_ice_hockey_biography"] = 20000,
["Infobox_ice_hockey_player"] = 19000,
["Infobox_ice_hockey_team"] = 3000,
["Infobox_ice_hockey_team_season"] = 2000,
["Infobox_international_football_competition"] = 5600,
["Infobox_islands"] = 8700,
["Infobox_islands/area"] = 9100,
["Infobox_islands/density"] = 9100,
["Infobox_islands/length"] = 8700,
["Infobox_islands/styles.css"] = 8700,
["Infobox_journal"] = 9700,
["Infobox_journal/Abbreviation_search"] = 9600,
["Infobox_journal/Bluebook_check"] = 9300,
["Infobox_journal/Former_check"] = 9300,
["Infobox_journal/ISO_4_check"] = 9300,
["Infobox_journal/ISSN-eISSN"] = 9400,
["Infobox_journal/Indexing_search"] = 9500,
["Infobox_journal/MathSciNet_check"] = 9300,
["Infobox_journal/NLM_check"] = 9300,
["Infobox_journal/frequency"] = 8500,
["Infobox_lake"] = 4400,
["Infobox_language"] = 9500,
["Infobox_language/family-color"] = 11000,
["Infobox_language/genetic"] = 6500,
["Infobox_language/linguistlist"] = 9500,
["Infobox_language/ref"] = 7100,
["Infobox_legislature"] = 3600,
["Infobox_library"] = 2100,
["Infobox_lighthouse"] = 2600,
["Infobox_lighthouse/light"] = 2600,
["Infobox_locomotive"] = 4800,
["Infobox_magazine"] = 7500,
["Infobox_manner_of_address"] = 3300,
["Infobox_mapframe"] = 78000,
["Infobox_martial_artist"] = 5600,
["Infobox_martial_artist/record"] = 5600,
["Infobox_medal_templates"] = 418000,
["Infobox_medical_condition"] = 10000,
["Infobox_medical_condition_(new)"] = 8200,
["Infobox_military_conflict"] = 21000,
["Infobox_military_installation"] = 9600,
["Infobox_military_person"] = 44000,
["Infobox_military_unit"] = 26000,
["Infobox_mine"] = 2100,
["Infobox_model"] = 2300,
["Infobox_mountain"] = 28000,
["Infobox_multi-sport_competition_event"] = 2200,
["Infobox_museum"] = 10000,
["Infobox_musical_artist"] = 121000,
["Infobox_musical_artist/color"] = 121000,
["Infobox_musical_artist/hCard_class"] = 310000,
["Infobox_musical_composition"] = 2800,
["Infobox_name"] = 7400,
["Infobox_name_module"] = 6600,
["Infobox_newspaper"] = 9500,
["Infobox_nobility"] = 2400,
["Infobox_noble"] = 7200,
["Infobox_officeholder"] = 213000,
["Infobox_officeholder/office"] = 218000,
["Infobox_official_post"] = 7900,
["Infobox_organization"] = 35000,
["Infobox_pageant_titleholder"] = 2800,
["Infobox_park"] = 7200,
["Infobox_person"] = 464000,
["Infobox_person/Wikidata"] = 5000,
["Infobox_person/height"] = 101000,
["Infobox_person/length"] = 7000,
["Infobox_person/weight"] = 66000,
["Infobox_philosopher"] = 3300,
["Infobox_planet"] = 4700,
["Infobox_play"] = 3800,
["Infobox_political_party"] = 14000,
["Infobox_power_station"] = 3000,
["Infobox_prepared_food"] = 3100,
["Infobox_professional_wrestler"] = 4200,
["Infobox_professional_wrestling_event"] = 2600,
["Infobox_protected_area"] = 14000,
["Infobox_protein_family"] = 2100,
["Infobox_publisher"] = 2400,
["Infobox_racehorse"] = 5500,
["Infobox_racing_driver"] = 3600,
["Infobox_radio_station"] = 22000,
["Infobox_rail"] = 2900,
["Infobox_rail_line"] = 7200,
["Infobox_rail_line/tracking"] = 7200,
["Infobox_rail_service"] = 2900,
["Infobox_rail_service/doc"] = 2900,
["Infobox_reality_competition_season"] = 3400,
["Infobox_record_label"] = 4000,
["Infobox_recurring_event"] = 6300,
["Infobox_religious_biography"] = 5000,
["Infobox_religious_building"] = 12000,
["Infobox_religious_building/color"] = 17000,
["Infobox_restaurant"] = 2400,
["Infobox_river"] = 30000,
["Infobox_river/calcunit"] = 30000,
["Infobox_river/discharge"] = 30000,
["Infobox_river/row-style"] = 30000,
["Infobox_river/source"] = 30000,
["Infobox_road"] = 24000,
["Infobox_road/meta/mask/category"] = 23000,
["Infobox_road/meta/mask/country"] = 24000,
["Infobox_road/styles.css"] = 25000,
["Infobox_road_small"] = 2300,
["Infobox_rockunit"] = 6400,
["Infobox_royalty"] = 21000,
["Infobox_royalty/short_description"] = 13000,
["Infobox_rugby_biography"] = 15000,
["Infobox_rugby_biography/correct_date"] = 15000,
["Infobox_rugby_biography/depcheck"] = 15000,
["Infobox_rugby_league_biography"] = 9900,
["Infobox_rugby_league_biography/PLAYER"] = 9800,
["Infobox_rugby_team"] = 2600,
["Infobox_sailboat_specifications"] = 2200,
["Infobox_saint"] = 4900,
["Infobox_school"] = 38000,
["Infobox_school/short_description"] = 38000,
["Infobox_school_district"] = 5600,
["Infobox_school_district/styles.css"] = 5600,
["Infobox_scientist"] = 48000,
["Infobox_service_record"] = 2600,
["Infobox_settlement"] = 557000,
["Infobox_settlement/areadisp"] = 232000,
["Infobox_settlement/columns"] = 93000,
["Infobox_settlement/columns/styles.css"] = 93000,
["Infobox_settlement/densdisp"] = 430000,
["Infobox_settlement/impus"] = 81000,
["Infobox_settlement/lengthdisp"] = 168000,
["Infobox_settlement/link"] = 93000,
["Infobox_settlement/metric"] = 207000,
["Infobox_settlement/pref"] = 288000,
["Infobox_settlement/styles.css"] = 557000,
["Infobox_ship_begin"] = 41000,
["Infobox_ship_career"] = 37000,
["Infobox_ship_characteristics"] = 40000,
["Infobox_ship_class_overview"] = 4100,
["Infobox_ship_image"] = 40000,
["Infobox_shopping_mall"] = 3400,
["Infobox_short_story"] = 2300,
["Infobox_skier"] = 2500,
["Infobox_soap_character"] = 2900,
["Infobox_software"] = 14000,
["Infobox_software/simple"] = 14000,
["Infobox_song"] = 75000,
["Infobox_song/color"] = 75000,
["Infobox_song/link"] = 75000,
["Infobox_spaceflight"] = 3500,
["Infobox_spaceflight/styles.css"] = 3500,
["Infobox_sport_event"] = 2100,
["Infobox_sports_competition_event"] = 16000,
["Infobox_sports_competition_event/medalrow"] = 11000,
["Infobox_sports_league"] = 4900,
["Infobox_sports_season"] = 5300,
["Infobox_sports_team"] = 2200,
["Infobox_sportsperson"] = 105000,
["Infobox_stadium"] = 3600,
["Infobox_station"] = 55000,
["Infobox_station/doc"] = 54000,
["Infobox_station/services"] = 55000,
["Infobox_station/styles.css"] = 55000,
["Infobox_street"] = 3300,
["Infobox_swimmer"] = 9300,
["Infobox_television"] = 56000,
["Infobox_television/Short_description"] = 54000,
["Infobox_television_channel"] = 6200,
["Infobox_television_episode"] = 12000,
["Infobox_television_episode/styles.css"] = 12000,
["Infobox_television_season"] = 9300,
["Infobox_television_station"] = 3700,
["Infobox_tennis_biography"] = 10000,
["Infobox_tennis_event"] = 2400,
["Infobox_tennis_tournament_event"] = 18000,
["Infobox_tennis_tournament_year"] = 9000,
["Infobox_tennis_tournament_year/color"] = 27000,
["Infobox_tennis_tournament_year/footer"] = 27000,
["Infobox_train"] = 2300,
["Infobox_union"] = 2100,
["Infobox_university"] = 26000,
["Infobox_user"] = 2600,
["Infobox_venue"] = 18000,
["Infobox_video_game"] = 27000,
["Infobox_video_game/styles.css"] = 27000,
["Infobox_volleyball_biography"] = 5200,
["Infobox_weapon"] = 7200,
["Infobox_website"] = 7700,
["Infobox_writer"] = 38000,
["Information"] = 105000,
["Information/styles.css"] = 105000,
["Inprogress"] = 2300,
["Input_link"] = 32000,
["Instagram"] = 10000,
["Interlanguage_link"] = 146000,
["Interlanguage_link_multi"] = 20000,
["Internet_Archive_author"] = 18000,
["Internet_Archive_film"] = 2500,
["Intitle"] = 12000,
["Invalid_SVG"] = 3700,
["Invalid_SVG/styles.css"] = 3700,
["Ipsock"] = 7900,
["Iptalk"] = 21000,
["IranCensus2006"] = 50000,
["IranNCSGN"] = 3200,
["Iran_Census_2006"] = 50000,
["Irc"] = 2100,
["Irish_place_name"] = 2600,
["IsIPAddress"] = 41000,
["IsValidPageName"] = 138000,
["Is_country_in_Central_America"] = 13000,
["Is_country_in_the_Caribbean"] = 14000,
["Is_interwiki_link"] = 6100,
["Is_italic_taxon"] = 469000,
["Is_redirect"] = 26000,
["Isbn"] = 7300,
["Isfdb_name"] = 3800,
["Isfdb_title"] = 4400,
["Isnumeric"] = 204000,
["Iso2continent"] = 35000,
["Iso2country"] = 23000,
["Iso2country/article"] = 23000,
["Iso2country/data"] = 23000,
["Iso2nationality"] = 220000,
["Issubst"] = 71000,
["Isu_name"] = 2300,
["Italic_dab2"] = 5100,
["Italic_title"] = 284000,
["Italic_title_prefixed"] = 8600,
["Italics_colon"] = 3500,
["Italictitle"] = 4300,
["Ivm"] = 5700,
["Ivm/styles.css"] = 5700,
["Ivmbox"] = 122000,
["Ivory_messagebox"] = 138000,
["Module:I18n/complex_date"] = 65000,
["Module:IP"] = 129000,
["Module:IPA_symbol"] = 4700,
["Module:IPA_symbol/data"] = 4700,
["Module:IPAc-en"] = 48000,
["Module:IPAc-en/data"] = 48000,
["Module:IPAc-en/phonemes"] = 48000,
["Module:IPAc-en/pronunciation"] = 48000,
["Module:IPAddress"] = 190000,
["Module:ISO_3166"] = 1020000,
["Module:ISO_3166/data/AT"] = 2500,
["Module:ISO_3166/data/BA"] = 3400,
["Module:ISO_3166/data/CA"] = 2500,
["Module:ISO_3166/data/CN"] = 2100,
["Module:ISO_3166/data/DE"] = 14000,
["Module:ISO_3166/data/ES"] = 3600,
["Module:ISO_3166/data/FR"] = 38000,
["Module:ISO_3166/data/GB"] = 6400,
["Module:ISO_3166/data/GR"] = 3100,
["Module:ISO_3166/data/IN"] = 28000,
["Module:ISO_3166/data/IR"] = 4600,
["Module:ISO_3166/data/National"] = 1020000,
["Module:ISO_3166/data/PL"] = 5100,
["Module:ISO_3166/data/RS"] = 3200,
["Module:ISO_3166/data/RU"] = 24000,
["Module:ISO_3166/data/US"] = 84000,
["Module:ISO_639_name"] = 20000,
["Module:ISOdate"] = 65000,
["Module:Icon"] = 573000,
["Module:Icon/data"] = 573000,
["Module:If_empty"] = 3670000,
["Module:If_in_page"] = 8800,
["Module:If_preview"] = 542000,
["Module:If_preview/configuration"] = 542000,
["Module:If_preview/styles.css"] = 542000,
["Module:Import_style"] = 11000,
["Module:In_lang"] = 352000,
["Module:Indent"] = 4200,
["Module:Infobox"] = 4050000,
["Module:Infobox/dates"] = 66000,
["Module:Infobox/styles.css"] = 4310000,
["Module:Infobox3cols"] = 294000,
["Module:InfoboxImage"] = 4350000,
["Module:Infobox_body_of_water_tracking"] = 18000,
["Module:Infobox_cyclist_tracking"] = 16000,
["Module:Infobox_gene"] = 13000,
["Module:Infobox_mapframe"] = 398000,
["Module:Infobox_military_conflict"] = 21000,
["Module:Infobox_military_conflict/styles.css"] = 21000,
["Module:Infobox_multi-lingual_name"] = 20000,
["Module:Infobox_multi-lingual_name/data"] = 20000,
["Module:Infobox_power_station"] = 3000,
["Module:Infobox_road"] = 25000,
["Module:Infobox_road/browselinks"] = 25000,
["Module:Infobox_road/errors"] = 24000,
["Module:Infobox_road/length"] = 25000,
["Module:Infobox_road/locations"] = 24000,
["Module:Infobox_road/map"] = 24000,
["Module:Infobox_road/route"] = 25000,
["Module:Infobox_road/sections"] = 24000,
["Module:Infobox_television"] = 56000,
["Module:Infobox_television_disambiguation_check"] = 63000,
["Module:Infobox_television_episode"] = 12000,
["Module:Infobox_television_season_disambiguation_check"] = 8800,
["Module:Infobox_television_season_name"] = 9300,
["Module:Internet_Archive"] = 18000,
["Module:IrelandByCountyCatNav"] = 2900,
["Module:Is_infobox_in_lead"] = 375000,
["Module:Is_instance"] = 332000,
["Module:Italic_title"] = 1100000,
["Module:Italic_title2"] = 5100,
}
ba90772744fe880e403a431fb72b58155e842d3a
Template:When on basepage
10
191
544
543
2023-06-06T13:37:18Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:When_on_basepage]]: w
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "page" parameter then detect
basepage/subpage/subsubpage-->
{{#if:{{{page|}}}
| {{#if:{{#titleparts:{{{page}}}|0|3}}
| subsubpage <!--Subsubpage or lower-->
| {{#if:{{#titleparts:{{{page}}}|0|2}}
| subpage
| basepage
}}
}}
| {{#if:{{#titleparts:{{FULLPAGENAME}}|0|3}}
| subsubpage <!--Subsubpage or lower-->
| {{#if:{{#titleparts:{{FULLPAGENAME}}|0|2}}
| subpage
| basepage
}}
}}
}}
| basepage = {{{1|}}}
| subpage = {{{2|}}}
| subsubpage = {{{3| {{{2|}}} }}} <!--Respecting empty parameter on purpose-->
}}<!--End switch--><noinclude>
{{Documentation}}
</noinclude>
cf4dc92df647a26ab0ce149772a1fe3ac6c3dfc0
Template:Correct title examples
10
192
546
545
2023-06-06T13:37:19Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Correct_title_examples]]: w
wikitext
text/x-wiki
{| class="wikitable" style="background: transparent;"
|+ Title changing or correcting templates + magic word {{Navbar|Correct title examples|plain=1|brackets=y}}
|-
! scope="col" style="width: 20%;" | Wiki markup <br /><span style="font-weight: normal; font-size: 90%">[[Help:Transclusion|Transclusion]] from template:</span>
! scope="col" 40% | Involves
! scope="col" style="width: 20%;" | Correct name
! scope="col" style="width: 20%;" | Actual article name
|-
! scope="row" | {{tlp|Italic title}}
| Title in italics
| ''To Kill a Mockingbird''
| [[To Kill a Mockingbird]]
|-
! scope="row" | {{tlp|Italic title|all{{=}}yes}}
| Complete title in italics, including parentheses
| ''Randall and Hopkirk (Deceased)''
| [[Randall and Hopkirk (Deceased)]]
|-
! scope="row" | {{tlp|Italic title|string{{=}}Ally McBeal}}
| Phrase of {{para|string}} in italics
| List of ''Ally McBeal'' episodes
| [[List of Ally McBeal episodes]]
|-
! scope="row" | {{tlp|Italic title|all{{=}}yes|string{{=}}Fringe}}
| Phrase of {{para|string}} in italics; also looks in parentheses
| Peter (''Fringe'' episode)
| [[Peter (Fringe episode)]]
|-
! scope="row" | {{tlp|Italic disambiguation}}
| Disambiguation in italics
| The End (''Lost'')
| [[The End (Lost)]]
|-
! scope="row" | {{tlp|Lowercase title}}
| Lowercase first character
| eBay
| [[EBay]]
|-
! scope="row" | {{tlp|Lowercase title|italic{{=}}yes}}
| Lowercase first character and place title in italics, not including disambiguation
| ''iCarly'' (soundtrack)
| [[ICarly (soundtrack)]]
|-
! scope="row" | {{tlp|Lowercase title|italic{{=}}yes|force{{=}}yes}}
| Lowercase first character and place title in italics, including disambiguation
|
|
|-
! scope="row" | {{tlp|Lowercase title|dab{{=}}yes}}
| Lowercase first character and place disambiguation in italics
| iSpy (''Modern Family'')
| [[ISpy (Modern Family)]]
|-
! scope="row" | {{tlp|Correct title|reason{{=}}bracket}}
| [[bracket|< > [ ] { }]]
| Benzo[''a'']pyrene
| [[Benzo(a)pyrene]]
|-
! scope="row" | {{tlp|Correct title|reason{{=}}#}}
| [[Number sign|#]]
| Pilot #5 || [[Pilot No. 5]]
|-
! scope="row" | {{tlp|Correct title|reason{{=}}:}}
| [[colon (punctuation)|:]]
| DK: King of Swing
| [[DK King of Swing]]
|-
! scope="row" style="background: #EAECF1;" | <span style="font-weight: normal; font-size: 92%;">[[Help:Magic words|Magic word:]]</span>
! scope="row" colspan="3" style="background: #EAECF1;" |
|-
! scope="row" | {{[[meta:Help:Magic words#Miscellany|DISPLAYTITLE]]}}
| Various
| _NSAKEY
| [[NSAKEY]]
|}<noinclude>
{{Documentation|content=
[[Category:Correct title templates|Examples]]
}}
</noinclude>
8245a1def0c8a75905f4159317fed38f23ad7ce3
Template:Italic title/doc
10
193
548
547
2023-06-06T13:37:20Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Italic_title/doc]]: w
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]) -->
{{High-use}}
{{Template shortcut|Italic|Italics}}
{{lua|Module:Italic title}}
'''Template:Italic title''' italicizes page titles. Article titles cannot contain wiki formatting, such as <code><nowiki>''</nowiki></code>, so article titles cannot be italicized in the normal way. This template has the following effects:
* Titles with no [[parentheses]] <code>()</code> are fully italicised:
** {{Nowrap|<code>Foo</code>}} → {{Nowrap|'''''Foo'''''}}
** {{Nowrap|<code>Talk:Foo</code>}} → {{Nowrap|'''Talk:''Foo'''''}}
* Titles which contain parentheses are italicised before the first opening parenthesis:
** {{Nowrap|<code>Foo (bar)</code>}} → {{Nowrap|'''''Foo'' (bar)'''}}
** {{Nowrap|<code>Talk:Foo (bar)</code>}} → {{Nowrap|'''Talk:''Foo'' (bar)'''}}
* Italicization can be forced on parenthesized text with the {{para|all|yes}} parameter.
This template should only be used in articles that meet the criteria for italic titles given in the [[Wikipedia:Article titles#Italics and other formatting|Article titles]] policy.
Meta templates which use this template should place {{Tl|Auto italic title}} in their documentation.
==Location on page==
If the page has a {{t|Short description}} template, this template should go immediately underneath it, normally as the second item on the page. If there is no {{t|Short description}} template, add this template at the very top of the page, above everything else. There ought to be no blank line after {{tlg|Italic title|nolink=1}} because that will cause an extra blank line in the page's rendered appearance.
==Usage==
===Basic usage===
{{tlx|Italic title}}
===All parameters===
{{tlx|Italic title|noerror|string{{=}}text in title|all{{=}}yes}}
== Parameters ==
* {{para|1}}: if this is set to {{para|1|noerror}}, error messages are suppressed. See [[#Errors]] for more details.
* {{para|all}}: if this is set to {{para|all|yes}}, text in parentheses is italicized.
* {{para|string}}: instead of italicizing the whole title, italicize only some specific text. For example, using {{para|string|Ally McBeal}} on the page {{nowrap|"List of Ally McBeal episodes"}} would result in {{nowrap|"List of ''Ally McBeal'' episodes"}}.
<code><nowiki>{{</nowiki>[[Wikipedia:Page name#Changing the displayed title|DISPLAYTITLE]]:Desired Title<nowiki>}}</nowiki></code> can be used instead in cases not covered by the parameters, e.g. two substrings with italics, or italics combined with lowercase first character.
== Errors ==
Sometimes you may see red error messages like this at the top of the page:
<span class="error"><nowiki>Warning: Display title "<i>Article title (disambiguation)</i>" overrides earlier display title "<i>Article title</i> (disambiguation)".</nowiki></span>
This usually means that there is another instance of {{tl|Italic title}} on the page, usually added by one of the infoboxes. Certain infoboxes, for example {{tl|Infobox album}}, add {{tl|Italic title}} by default. Check the template documentation for any infobox used on the page; it may have instructions about how to deal with italic titles. You may be able to adjust the italics from the infobox instead of using {{tl|Italic title}} at the top of the article. Or if that doesn't work, you may be able to disable the infobox's italics code altogether.
If you are still having problems, try putting {{tl|Italic title}} after the infobox. You can suppress the error message by using the code <code><nowiki>{{Italic title|noerror}}</nowiki></code>.
Technical details: this template uses the [[Wikipedia:Magic words#Behavior switches|DISPLAYTITLE magic word]] to italicize the title. Error messages can be produced by any two templates which use this magic word, and are not limited to this template. If you are unsure why you are getting a particular error message, you can ask about it at [[Wikipedia:Village pump (technical)]].
== Tracking categories ==
If the {{para|string}} parameter is used but that string is not found in the title, the page is added to [[:Category:Pages using italic title with no matching string]].
== TemplateData ==
{{TemplateDataHeader}}
<templatedata>
{
"description": "A template to italicize article titles",
"params": {
"1": {
"label": "Error options",
"description": "If set to \"noerror\", suppresses error messages. Using this is a last-ditch fix - see the template documentation for other options.",
"type": "string"
},
"all": {
"label": "All",
"description": "If set to \"yes\", italicization is forced on parenthesized text.",
"type": "string",
"required": false
},
"string": {
"label": "String",
"description": "Specify a string in the title to italicize, rather than italicizing the entire title.",
"type": "string",
"required": false
}
}
}
</templatedata>
==See also==
* [[WP:ITALICTITLE]]
* {{Tlx|Italic title prefixed}}
* {{Tlx|Italics correction}}
{{Correct title examples}}
{{When on basepage
|<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Correct title templates]]
[[Category:Lua-based templates]]
}}
0f6069dab29a8a2cce34923da916a69b26bd6ed1
Cartagra
0
194
549
2023-06-06T13:38:40Z
Otonashi Ayana
2
Created page with "{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has been retroactively deemed a predecessor to the ''Kara no Shōjo'' series."
wikitext
text/x-wiki
{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has been retroactively deemed a predecessor to the ''Kara no Shōjo'' series.
4d91b00d4e7cf743f2f796b5760b033c7114b41a
560
549
2023-06-06T13:39:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series.
73fda6fd8f22df0881e146ea550e989fc5b0cf96
561
560
2023-06-06T13:42:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, [[Shugo Takashiro]], as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
4c05a36f2129fd924bf2fb23d3b67a95eb2e8df6
567
561
2023-06-06T13:54:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
ff417d2dd6a63214ac99207ea168718cd8d5dcbc
573
567
2023-06-06T14:07:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Endings ==
''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End.
* Neutral End (Hatsune) —
* Neutral End (Kazuna) —
* True End — Obtainable only after completing Kazuna's neutral End.
* Bad Ends:
** {{o|Takako|Ayasaki}} Ending (Nightmare Ending)
** {{o|Kaori|Fukamizu}} Ending (Nun Ending)
** {{o|Nana|Takashiro}} Ending
** Koyuki & Seri Ending
9c14ed6ceb0584235c6046aad8d8f4afc5866e5a
574
573
2023-06-06T14:10:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Endings ==
''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End.
=== Neutral End (Hatsune) ===
=== Neutral End (Kazuna) ===
=== True End ===
Obtainable only after completing Kazuna's neutral End.
=== Bad Ends ===
; {{o|Takako|Ayasaki}} Ending (Nightmare Ending)
; {{o|Kaori|Fukamizu}} Ending (Nun Ending)
; {{o|Nana|Takashiro}} Ending
; Koyuki & Seri Ending
4c0a95faef310102849779973eda67b2d7cc1594
575
574
2023-06-06T14:10:47Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Endings ==
''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End.
=== Neutral End (Hatsune) ===
=== Neutral End (Kazuna) ===
=== True End ===
Obtainable only after completing Kazuna's neutral End.
=== Bad Ends ===
; {{o|Takako|Ayasaki}} Ending (Nightmare Ending)
; {{o|Kaori|Fukamizu}} Ending (Nun Ending)
; {{o|Nana|Takashiro}} Ending
; Koyuki & Seri Ending
[[Category:Cartagra]]
73fd7250d3e09df66d2e09294bee2c88c5cda15e
Module:Italic title
828
195
551
550
2023-06-06T13:39:08Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Italic_title]]: w
Scribunto
text/plain
-- This module implements {{italic title}}.
require('strict')
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local yesno = require('Module:Yesno')
--------------------------------------------------------------------------------
-- ItalicTitle class
--------------------------------------------------------------------------------
local ItalicTitle = {}
do
----------------------------------------------------------------------------
-- Class attributes and functions
-- Things that belong to the class are here. Things that belong to each
-- object are in the constructor.
----------------------------------------------------------------------------
-- Keys of title parts that can be italicized.
local italicizableKeys = {
namespace = true,
title = true,
dab = true,
}
----------------------------------------------------------------------------
-- ItalicTitle constructor
-- This contains all the dynamic attributes and methods.
----------------------------------------------------------------------------
function ItalicTitle.new()
local obj = {}
-- Function for checking self variable in methods.
local checkSelf = libraryUtil.makeCheckSelfFunction(
'ItalicTitle',
'obj',
obj,
'ItalicTitle object'
)
-- Checks a key is present in a lookup table.
-- Param: name - the function name.
-- Param: argId - integer position of the key in the argument list.
-- Param: key - the key.
-- Param: lookupTable - the table to look the key up in.
local function checkKey(name, argId, key, lookupTable)
if not lookupTable[key] then
error(string.format(
"bad argument #%d to '%s' ('%s' is not a valid key)",
argId,
name,
key
), 3)
end
end
-- Set up object structure.
local parsed = false
local categories = {}
local italicizedKeys = {}
local italicizedSubstrings = {}
-- Parses a title object into its namespace text, title, and
-- disambiguation text.
-- Param: options - a table of options with the following keys:
-- title - the title object to parse
-- ignoreDab - ignore any disambiguation parentheses
-- Returns the current object.
function obj:parseTitle(options)
checkSelf(self, 'parseTitle')
checkType('parseTitle', 1, options, 'table')
checkTypeForNamedArg('parseTitle', 'title', options.title, 'table')
local title = options.title
-- Title and dab text
local prefix, parentheses
if not options.ignoreDab then
prefix, parentheses = mw.ustring.match(
title.text,
'^(.+) %(([^%(%)]+)%)$'
)
end
if prefix and parentheses then
self.title = prefix
self.dab = parentheses
else
self.title = title.text
end
-- Namespace
local namespace = mw.site.namespaces[title.namespace].name
if namespace and #namespace >= 1 then
self.namespace = namespace
end
-- Register the object as having parsed a title.
parsed = true
return self
end
-- Italicizes part of the title.
-- Param: key - the key of the title part to be italicized. Possible
-- keys are contained in the italicizableKeys table.
-- Returns the current object.
function obj:italicize(key)
checkSelf(self, 'italicize')
checkType('italicize', 1, key, 'string')
checkKey('italicize', 1, key, italicizableKeys)
italicizedKeys[key] = true
return self
end
-- Un-italicizes part of the title.
-- Param: key - the key of the title part to be un-italicized. Possible
-- keys are contained in the italicizableKeys table.
-- Returns the current object.
function obj:unitalicize(key)
checkSelf(self, 'unitalicize')
checkType('unitalicize', 1, key, 'string')
checkKey('unitalicize', 1, key, italicizableKeys)
italicizedKeys[key] = nil
return self
end
-- Italicizes a substring in the title. This only affects the main part
-- of the title, not the namespace or the disambiguation text.
-- Param: s - the substring to be italicized.
-- Returns the current object.
function obj:italicizeSubstring(s)
checkSelf(self, 'italicizeSubstring')
checkType('italicizeSubstring', 1, s, 'string')
italicizedSubstrings[s] = true
return self
end
-- Un-italicizes a substring in the title. This only affects the main
-- part of the title, not the namespace or the disambiguation text.
-- Param: s - the substring to be un-italicized.
-- Returns the current object.
function obj:unitalicizeSubstring(s)
checkSelf(self, 'unitalicizeSubstring')
checkType('unitalicizeSubstring', 1, s, 'string')
italicizedSubstrings[s] = nil
return self
end
-- Renders the object into a page name. If no title has yet been parsed,
-- the current title is used.
-- Returns string
function obj:renderTitle()
checkSelf(self, 'renderTitle')
-- Italicizes a string
-- Param: s - the string to italicize
-- Returns string.
local function italicize(s)
assert(type(s) == 'string', 's was not a string')
assert(s ~= '', 's was the empty string')
return string.format('<i>%s</i>', s)
end
-- Escape characters in a string that are magic in Lua patterns.
-- Param: pattern - the pattern to escape
-- Returns string.
local function escapeMagicCharacters(s)
assert(type(s) == 'string', 's was not a string')
return s:gsub('%p', '%%%0')
end
-- If a title hasn't been parsed yet, parse the current title.
if not parsed then
self:parseTitle{title = mw.title.getCurrentTitle()}
end
-- Italicize the different parts of the title and store them in a
-- titleParts table to be joined together later.
local titleParts = {}
-- Italicize the italicizable keys.
for key in pairs(italicizableKeys) do
if self[key] then
if italicizedKeys[key] then
titleParts[key] = italicize(self[key])
else
titleParts[key] = self[key]
end
end
end
-- Italicize substrings. If there are any substrings to be
-- italicized then start from the raw title, as this overrides any
-- italicization of the main part of the title.
if next(italicizedSubstrings) then
titleParts.title = self.title
for s in pairs(italicizedSubstrings) do
local pattern = escapeMagicCharacters(s)
local italicizedTitle, nReplacements = titleParts.title:gsub(
pattern,
italicize
)
titleParts.title = italicizedTitle
-- If we didn't make any replacements then it means that we
-- have been passed a bad substring or that the page has
-- been moved to a bad title, so add a tracking category.
if nReplacements < 1 then
categories['Pages using italic title with no matching string'] = true
end
end
end
-- Assemble the title together from the parts.
local ret = ''
if titleParts.namespace then
ret = ret .. titleParts.namespace .. ':'
end
ret = ret .. titleParts.title
if titleParts.dab then
ret = ret .. ' (' .. titleParts.dab .. ')'
end
return ret
end
-- Returns an expanded DISPLAYTITLE parser function called with the
-- result of obj:renderTitle, plus any other optional arguments.
-- Returns string
function obj:renderDisplayTitle(...)
checkSelf(self, 'renderDisplayTitle')
return mw.getCurrentFrame():callParserFunction(
'DISPLAYTITLE',
self:renderTitle(),
...
)
end
-- Returns an expanded DISPLAYTITLE parser function called with the
-- result of obj:renderTitle, plus any other optional arguments, plus
-- any tracking categories.
-- Returns string
function obj:render(...)
checkSelf(self, 'render')
local ret = self:renderDisplayTitle(...)
for cat in pairs(categories) do
ret = ret .. string.format(
'[[Category:%s]]',
cat
)
end
return ret
end
return obj
end
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
local function getArgs(frame, wrapper)
assert(type(wrapper) == 'string', 'wrapper was not a string')
return require('Module:Arguments').getArgs(frame, {
wrappers = wrapper
})
end
-- Main function for {{italic title}}
function p._main(args)
checkType('_main', 1, args, 'table')
local italicTitle = ItalicTitle.new()
italicTitle:parseTitle{
title = mw.title.getCurrentTitle(),
ignoreDab = yesno(args.all, false)
}
if args.string then
italicTitle:italicizeSubstring(args.string)
else
italicTitle:italicize('title')
end
return italicTitle:render(args[1])
end
function p.main(frame)
return p._main(getArgs(frame, 'Template:Italic title'))
end
function p._dabonly(args)
return ItalicTitle.new()
:italicize('dab')
:render(args[1])
end
function p.dabonly(frame)
return p._dabonly(getArgs(frame, 'Template:Italic dab'))
end
return p
9b49016c8f526f680e9ecdaf36ec4ceafda2a2f8
Template:Module other
10
167
553
386
2023-06-06T13:39:15Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Module_other]]: w
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Module}}
| module
| other
}}
}}
| module = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
5a2444103b3cffc028f4dc0de2e8a278f87c7129
Template:Module rating
10
196
555
554
2023-06-06T13:39:16Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Module_rating]]: w
wikitext
text/x-wiki
<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]]
| alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]]
| beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]]
| release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]]
| protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]]
| semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|Module rating is invalid or not specified.}}
}}
}}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude>
{{module rating|release|nocat=true|demospace=module}}
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc
Template:High-risk
10
197
557
556
2023-06-06T13:39:16Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:High-risk]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:High-use]]
{{Rcat shell|
{{R with Wikidata item}}
{{R from merge}}
{{R from template shortcut}}
}}
52c9a8c75748fd2b20183ed6c60e1f3c3a435cc9
Module:Italic title/doc
828
198
559
558
2023-06-06T13:39:17Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Italic_title/doc]]: w
wikitext
text/x-wiki
{{High-risk| approximately 844000 }}
{{module rating|protected}}
{{Lua|Module:Yesno|Module:Arguments}}
This module implements {{tl|italic title}} and {{tl|italic dab}}. Please see the template pages for documentation.
5dea766bbc5c3c2d91e2b8df9e54d506aef23b35
MediaWiki:Common.css
8
7
562
523
2023-06-06T13:48:10Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Courgette&display=swap');
:root{
--handwriting:Courgette;
}
.item-title{
pointer-events:none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
537b3094aebe7b30dc3a4f2ed213e167eadb55ed
563
562
2023-06-06T13:50:05Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Courgette&display=swap');
:root{
--handwriting:Courgette;
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
1b21fe807112898a5f10d1c5a800be3ded151b8f
564
563
2023-06-06T13:51:32Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting:Courgette;
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
54c7e5333d3d594eab57e7d02281b6d3991a0849
565
564
2023-06-06T13:52:01Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting:Merienda;
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
260d07602415c68c41e6c699c85f069399dd401b
Kara no Shoujo
0
181
566
525
2023-06-06T13:53:48Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}
'''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
1428a49cad657b2e5a8ebb340eafc957c99cd067
Template:O
10
199
568
2023-06-06T14:02:10Z
Otonashi Ayana
2
Created page with "{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}"
wikitext
text/x-wiki
{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}
0ef653b6e49a11716c9343d1e0b61fb34a387cd0
569
568
2023-06-06T14:02:59Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Template:Nl]] to [[Template:O]] without leaving a redirect
wikitext
text/x-wiki
{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}
0ef653b6e49a11716c9343d1e0b61fb34a387cd0
572
569
2023-06-06T14:05:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{charname|{{{1}}}|{{{2}}}}}
d9d0a5256357f8d951a7d8b30ce7ce6168081688
Template:N
10
174
570
465
2023-06-06T14:03:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
[[{{o}}]]
39f7e2a6d9a6daf5aa6ab09aa4b7c4dab28244aa
571
570
2023-06-06T14:04:18Z
Otonashi Ayana
2
wikitext
text/x-wiki
[[{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}]]
24b617b3462b7070ea0f183d6e746d576b7aa33a
Category:Cartagra
14
200
576
2023-06-06T14:10:58Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Template:Cartagra characters
10
201
577
2023-06-06T14:21:45Z
Otonashi Ayana
2
Created page with "{{Navbox | name = cartagra characters | title = {{cartagra}} | state = autocollapse | listclass = hlist | group1 = Detectives | list1 = * {{n|Shugo|Takashiro}} * {{n|Nana|Takashiro}} * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} [[Category:Cartagra]] [[Category:Characters]] </includeonly>"
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = {{cartagra}}
| state = autocollapse
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Nana|Takashiro}}
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
[[Category:Cartagra]]
[[Category:Characters]]
</includeonly>
ef8b16c81d3ac3cd97a0520fa1bd7c7d0959f93a
578
577
2023-06-06T14:22:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = {{cartagra}}
| state = autocollapse
| listclass = hlist
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
| group2 = Police
| list2 =
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
}}
[[Category:Cartagra]]
[[Category:Characters]]
</includeonly>
69cf08da01e9838f5b6c8216c77db7a3ebb586d1
579
578
2023-06-06T14:24:40Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = {{cartagra}}
| state = autocollapse
| listclass = hlist
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
| group2 = Police
| list2 =
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
}}<includeonly>
[[Category:Cartagra]]
[[Category:Characters]]
</includeonly>
fd4a4bbfc8c3f896a8f76f4dc552d64a1718fa51
Shugo Takashiro
0
62
580
326
2023-06-06T14:25:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations = {{plainlist|
* {{spoiler|[[Kazuna Kozuki]] (love interest)}}
* [[Kazuna Takashiro]] (wife)
}}
}}
{{cartagra characters}}
{{kns characters}}
ac390ee3764cbbe2f155ba4fcaa7609649ce05a4
585
580
2023-06-06T14:37:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations = {{plainlist|
* {{spoiler|[[Kazuna Kozuki]] (love interest)}}
* [[Kazuna Takashiro]] (wife)
}}
}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
0a8b07b6017955d8c5b1d1de1695c4f55a1952a9
Template:Kns characters
10
138
581
466
2023-06-06T14:25:58Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}}
| state = autocollapse
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Kara no Shōjo]]
[[Category:Characters]]
</includeonly>
ca4fd2618a0fca44e3e6146b3e8fb0509ad1e828
584
581
2023-06-06T14:37:24Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}}
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Kara no Shōjo]]
[[Category:Characters]]
</includeonly>
e4b72464658da61aad8989fec69eaf9f187971d6
Template:C
10
202
582
2023-06-06T14:33:12Z
Otonashi Ayana
2
Redirected page to [[Template:Character name]]
wikitext
text/x-wiki
#REDIRECT [[Template:Character name]]
16cc49e743d5c36e941e82df59c0ce4db9eb66a3
Ryoichi Yaginuma
0
203
583
2023-06-06T14:35:05Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Ryoichi | family name = Yaginuma | jname = | image = | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement."
wikitext
text/x-wiki
{{infobox character
| given name = Ryoichi
| family name = Yaginuma
| jname =
| image =
| aka =
| gender =
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement.
e849a3436cdb173f03ebfc2f83b348f2c7e4c5e5
Template:Tree chart
10
204
587
586
2023-06-06T14:40:52Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tree_chart]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Tree chart|main}}</includeonly><noinclude>{{documentation}} </noinclude>
4936e8a8e590be91372b7d234aeea78bd418bf0e
Template:Chart bottom
10
205
589
588
2023-06-06T14:41:03Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Chart_bottom]]: w
wikitext
text/x-wiki
<includeonly>|}</includeonly><noinclude>
{{documentation|Template:Chart top/doc}}
</noinclude>
8656d1ab679f4008937f20349c95b51e5b78781e
Template:Chart top
10
206
591
590
2023-06-06T14:41:04Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Chart_top]]: w
wikitext
text/x-wiki
{| class="collapsible {{#ifeq:{{Yesno-no|{{{collapsed|{{{collapse|}}}}}}}}|yes|collapsed|expanded}}" style="{{#switch:{{{align|}}}{{{float|}}}
| left = margin: 0.3em 1em 0.3em 0; float:left; clear:{{{clear|left}}}; min-width:{{{min-width|{{{width|33em}}}}}};
| right = margin: 0.3em 0 0.3em 1em; float:right; clear:{{{clear|right}}}; min-width:{{{min-width|{{{width|33em}}}}}};
| #default = margin: 0.3em auto auto; clear:{{{clear|none}}}; min-width:{{{min-width|{{{width|60em}}}}}};
}} width:{{{width|auto}}}; font-size:85%; border:1px solid #aaa"
! style="padding:0.2em 0.3em 0.2em {{#if:{{{template_name|}}}|0.3em|4.3em}};{{#if:{{{background|}}}|background:{{{background|}}}|background:none}}; width:{{{width|auto}}}" | {{#if:{{{template_name|}}}
|{{Navbar-collapsible|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}|{{{template_name}}}}}
|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}
}}
|-
| style="text-align:{{{text-align|center}}}" | {{#invoke:Check for unknown parameters|check|unknown=[[Category:Pages using chart top with unknown parameters|_VALUE_{{PAGENAME}}]]|preview=Page using [[Template:Chart top]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | align | background | clear | collapse | collapsed | float | min-width | template_name | text-align | title | width }}<noinclude>
|}
{{documentation}}</noinclude>
ad95734f767d68a3d7d70174fbc23ed2e147382e
Template:Tree chart/end
10
207
593
592
2023-06-06T14:41:04Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tree_chart/end]]: w
wikitext
text/x-wiki
<noinclude><table></noinclude></table><noinclude>{{Documentation|Template:Chart/end/doc}}</noinclude>
15c4ecebd8444b7398759d8fbcb9ac702f8ce07f
Template:Tree chart/start
10
208
595
594
2023-06-06T14:41:05Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tree_chart/start]]: w
wikitext
text/x-wiki
<table style="border-spacing: 0px; border-collapse: separate; {{#switch: {{{align|}}}
|left = float: left;
|right = float: right;
|center = margin: 0 auto;
|#default =
}} {{{style|}}}"><noinclude>
{{chart/end}}
{{Documentation}}
</noinclude>
e115d0e78fc595436e4e549d91432415a671fded
Module:Tree chart
828
209
597
596
2023-06-06T14:41:05Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Tree_chart]]: w
Scribunto
text/plain
require('strict')
local p = {}
local cells = mw.loadData('Module:Tree chart/data')
function p._main(cell_args)
local ret = mw.html.create()
local top = ret:tag('tr')
:css{ height = '1px',
['text-align'] = 'center' }
local bottom = ret:tag('tr')
:css{ height = '1px',
['text-align'] = 'center' }
for _, v in ipairs(cell_args) do
if type(v) == 'string' then
top:wikitext(cells[v].t)
bottom:wikitext(cells[v].b)
else
top:tag('td')
:attr{ colspan = v.colspan or cell_args.colspan or 6,
rowspan = v.rowspan or cell_args.rowspan or 2 }
:css{ padding = '0.2em',
border = (v.border or cell_args.border or '2') .. 'px solid black' }
:cssText(v.boxstyle or cell_args.boxstyle)
:wikitext(v.text)
end
end
return tostring(ret)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Tree chart', trim = false, removeBlanks = false})
local cell_args = {
colspan = args.colspan,
rowspan = args.rowspan,
border = args.border,
boxstyle = args.boxstyle
}
for _, val in ipairs(args) do
local trimmedVal = val:match('^%s*(.-)%s*$')
if trimmedVal == '' then
trimmedVal = '$'
end
if cells[trimmedVal] then
table.insert(cell_args, trimmedVal)
else
-- Unnamed params behave weirdly
-- white space at the front counts for param_{{{1}}}, but not whitespace at the end, so remove it
local rightTrimmedVal = val:gsub('%s+$','')
table.insert(cell_args, {
text = args[trimmedVal] or ('{{{'..trimmedVal..'}}}'),
colspan = args['colspan_'..rightTrimmedVal],
rowspan = args['rowspan_'..rightTrimmedVal],
border = args['border_'..rightTrimmedVal],
boxstyle = args['boxstyle_'..rightTrimmedVal]
})
end
end
return p._main(cell_args)
end
return p
6ae1652b12114e8af9fa123efd3bd2abc164e6fd
Module:Tree chart/data
828
210
599
598
2023-06-06T14:41:05Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Tree_chart/data]]: w
Scribunto
text/plain
local SLD = '1px solid black'
local DSH = '1px dashed black'
local DOT = '1px dotted black'
local data = {
['!'] = {
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['%'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
["'"] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['('] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
[')'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['*'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['+'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
[','] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['-'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['.'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['7'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
[':'] = {
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['A'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['C'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['D'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['E'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['F'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['G'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['G2'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['H'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['J'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['K'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['L'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['M'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['P'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['Q'] = {
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['R'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['S'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['T3'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['T2'] = {
b = { { style ={ ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['T'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['U'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['V'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
},
['W'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['X'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['X2'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['Y'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['Z'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['^'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['$'] = {
t = { { attr = { colspan = '2', rowspan = '2'}, style = { width = '2em', height = '2em' } } }
},
['`'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['a2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['a'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['b2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['b3'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['b'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['c'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['d'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['di'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['dj'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['e'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['f'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['fh'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] =DSH, width = '1em', height = '1em' } } }
},
['fy'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['h'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['he'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['i'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['ic'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['j'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['jc'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['k2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['k3'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['k'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['kq'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['kr'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['kq2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['kr2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['l2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['l3'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['l4'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['l'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['m2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['m'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } }
},
['mp'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['mp2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['n2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['n'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['np'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['np2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['o2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['o'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['om'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['om2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['on'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['on2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } }
},
['p2'] = {
b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['p'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['q2'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['q'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } }
},
['ql'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['ql2'] = {
b = { { style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = DOT, ['border-bottom'] =DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['r2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
},
['r'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['rl'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['rl2'] = {
b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['t'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } }
},
['v'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } }
},
['x'] = {},
['y'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } },
{ style = { width = '1em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
},
['ye'] = {
b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } },
t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } },
{ attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } }
},
['~'] = {
b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } },
t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } }
}
}
local retval = {}
for k,v in pairs(data) do
retval[k] = {}
for k2,v2 in pairs(v) do
local renderedCells = mw.html.create()
for k3,v3 in ipairs(v2) do
renderedCells:tag('td'):css(v3.style or {}):attr(v3.attr or {})
end
retval[k][k2] = tostring(renderedCells)
end
end
return retval
872003fd8ebaf82fdff91a68b5505e5ee25ae350
Template:User other
10
211
601
600
2023-06-06T14:41:06Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:User_other]]: w
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:User}}
| user
| other
}}
}}
| user = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
f5acc28ea326bedc6c0df1b8fb14cfe5fa940a7f
Template:Large
10
212
603
602
2023-06-06T14:41:07Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Large]]: w
wikitext
text/x-wiki
<span style="font-size:120%">{{{1}}}</span><noinclude>
{{Documentation}}
</noinclude>
8ba6ec8c3178e22dc1f05aa239df8a2b052be668
Template:Warnsign
10
213
605
604
2023-06-06T14:41:08Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Warnsign]]: w
wikitext
text/x-wiki
{{Respond|Ambox warning pn.svg|{{{{{|safesubst:}}}ucfirst:{{{1|Warning}}}}}|alt=red-outlined triangle containing exclamation point}}<noinclude>
{{Documentation}}
<!--Please add this template's categories to the /doc subpage, not here - thanks!-->
</noinclude>
77a823d5d0311de0e5fda3654918a744a3fa4033
Template:Graph, chart and plot templates
10
214
607
606
2023-06-06T14:41:10Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Graph,_chart_and_plot_templates]]: w
wikitext
text/x-wiki
{{Navbox
| name = Graph, chart and plot templates
|title=[[:Category:Graph, chart and plot templates|Graph, chart and plot templates]]
|state = {{{state<includeonly>|expanded</includeonly>}}}
|bodyclass = hlist
|group5 = Many types
|list5 = [[Template:Graph:Chart]], [[Module:Chart]]
|group10 = [[mw:Extension:Graph|Graph Extension]]
|list10 = [[Template:Graph:Chart]], [[Template:Graph:Lines]], [[Template:Graph:Stacked]], [[Template:Graph:Street map with marks]]
|group20 = Bar
|list20 = [[Template:Bar chart]], [[Template:Bar box]]
|group30 = Line
|list30 = [[Template:Graph:Lines]]
|group40 = [[Scatter plot]]
|list40 = [[Template:Dot chart]]
|group50 = [[Pie chart]]
|list50 = [[Template:Pie chart]]
|group60 = Tree
|list60 =
* [[Template:Tree chart]]
* [[Template:Ahnentafel]]
|group70 = Stacked
|list70 = [[Template:Stacked bar]]
|group80 = [[Cartogram]]
|list80 = [[Template:Graph:Map]], [[Template:Global Heat Maps by Year]]
|group90 = Color legends
|list90 = [[Template:Legend]], [[Template:Legend-line]], [[Template:BrewerColorLegends]]
}}{{Template other |<includeonly>{{sandbox other||[[Category:Graph, chart and plot templates]]}}</includeonly>}}<noinclude>{{documentation|content=
{{collapsible option|default=expanded}}
[[Category:Graph, chart and plot templates| ]]
}}</noinclude>
9669c735c207d7384b95b7e4b32c85cffcc929f2
Template:Tree chart/doc
10
215
609
608
2023-06-06T14:41:12Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tree_chart/doc]]: w
wikitext
text/x-wiki
{{Lua|Module:Tree chart}}
{{distinguish|Template:Graph:Chart}}<noinclude>
{{documentation subpage}}</noinclude><!--PLEASE ADD METADATA TO THE <includeonly> SECTION AT THE BOTTOM OF THIS PAGE
↓↓↓ EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE ↓↓↓-->
==Usage==
This template produces one row in a "family tree"-like chart consisting of boxes and connecting lines based loosely on an [[ASCII art]]-like syntax. It is meant to be used in conjunction with {{tl|Tree chart/start}} and {{tl|Tree chart/end}}. The chart is displayed as [[HTML]] tables using [[Cascading Style Sheets|CSS]] attributes, and may contain arbitrary [[wiki markup]] within the boxes. This implementation was based on the now-deprecated {{tl|family tree}} template.
==Basic example==
This code:
<syntaxhighlight lang="wikitext">
{{Tree chart/start|align=center|summary=An example family tree}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
</syntaxhighlight>
produces this:
{{Tree chart/start|align=center|summary=An example family tree}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad;
and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy. The code above produces a table of size 9 rows x 18 columns as shown below.
[[File:Chart template table structure.png|center|500px|The table structure created using the example above]]
==Collapsible basic example==
This code uses {{tl|chart top}}:
<syntaxhighlight lang="wikitext">
{{chart top|An example family tree}}
{{Tree chart/start|align=center}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
{{chart bottom}}
</syntaxhighlight>
produces this:
{{chart top|An example family tree}}
{{Tree chart/start|align=center}}
{{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}}
{{Tree chart| | | | | | | |)|-|-|-|.| }}
{{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}}
{{Tree chart| |,|-|-|-|+|-|-|-|.| | | }}
{{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}}
{{Tree chart/end}}
{{chart bottom}}
This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad;
and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy.
==Parameters==
The template accepts any number of unnamed parameters with each parameter specifying a '''tile''' or a '''box'''.
* '''Boxes''' can contain arbitrary [[wiki markup]]. The content of each box is specified using additional named parameters appended to the template call. Each box is '''three tiles wide''' and normally has a black border two pixels wide. Boxes can have any name that is a valid template parameter name, subject to a minimum of two alphabetical characters.
* '''Tiles''' are line drawing symbols used to connect the boxes. They consist of various styles of horizontal and vertical lines along with corners and crossings as needed. Tiles are specified using their one- or two-character name: for the most common tiles, that character is more or less approximate to the tile's appearance. A special case of a tile is the '''empty tile''', specified by a single space character. A table of available tiles is given below.
{| style="float: left; margin-left: 1em;"
|+ '''Solid lines:'''
|-
| {{large|<code>!</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|!}}{{Tree chart/end}} ||
| {{large|<code>,</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|,}}{{Tree chart/end}} ||
| {{large|<code>v</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|v}}{{Tree chart/end}} ||
| {{large|<code>.</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|.}}{{Tree chart/end}} ||
|-
| {{large|<code>-</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|-}}{{Tree chart/end}} ||
| {{large|<code>)</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|)}}{{Tree chart/end}} ||
| {{large|<code>+</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|+}}{{Tree chart/end}} ||
| {{large|<code>(</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|(}}{{Tree chart/end}} ||
|-
| || ||
| {{large|<code>`</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|`}}{{Tree chart/end}} ||
| {{large|<code>^</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|^}}{{Tree chart/end}} ||
| {{large|<code>'</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|'}}{{Tree chart/end}} ||
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dashed lines:'''
|-
| {{large|<code>:</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|:}}{{Tree chart/end}} ||
| {{large|<code>F</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|F}}{{Tree chart/end}} ||
| {{large|<code>V</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|V}}{{Tree chart/end}} ||
| {{large|<code>7</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|7}}{{Tree chart/end}} ||
|-
| {{large|<code>~</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|~}}{{Tree chart/end}} ||
| {{large|<code>D</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|D}}{{Tree chart/end}} ||
| {{large|<code>%</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|%}}{{Tree chart/end}} ||
| {{large|<code>C</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|C}}{{Tree chart/end}} ||
|-
| || ||
| {{large|<code>L</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|L}}{{Tree chart/end}} ||
| {{large|<code>A</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|A}}{{Tree chart/end}} ||
| {{large|<code>J</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|J}}{{Tree chart/end}} ||
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dotted lines:'''
|-
| {{large|<code>Q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Q}}{{Tree chart/end}} ||
| {{large|<code>S</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|S}}{{Tree chart/end}} ||
| {{large|<code>M</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|M}}{{Tree chart/end}} ||
| {{large|<code>T</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|T}}{{Tree chart/end}} ||
|-
| {{large|<code>P</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|P}}{{Tree chart/end}} ||
| {{large|<code>H</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|H}}{{Tree chart/end}} ||
| {{large|<code>R</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|R}}{{Tree chart/end}} ||
| {{large|<code>G</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|G}}{{Tree chart/end}} ||
|-
| || ||
| {{large|<code>Y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Y}}{{Tree chart/end}} ||
| {{large|<code>W</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|W}}{{Tree chart/end}} ||
| {{large|<code>Z</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Z}}{{Tree chart/end}} ||
|}
{| style="float: left; margin-left: 1em;"
|+'''Dashes hrzntl solid vrtcl:'''
| {{large|<code>fy</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fy}}{{Tree chart/end}}
| {{large|<code>y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|y}}{{Tree chart/end}}
| {{large|<code>ye</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ye}}{{Tree chart/end}}
|-
| {{large|<code>f</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|f}}{{Tree chart/end}}
| {{large|<code>t</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|t}}{{Tree chart/end}}
| {{large|<code>e</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|e}}{{Tree chart/end}}
|-
| {{large|<code>fh</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fh}}{{Tree chart/end}}
| {{large|<code>h</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|h}}{{Tree chart/end}}
| {{large|<code>he</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|he}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Solid hrzntl dashes vrtcl:'''
| {{large|<code>dj</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|dj}}{{Tree chart/end}}
| {{large|<code>j</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|j}}{{Tree chart/end}}
| {{large|<code>jc</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|jc}}{{Tree chart/end}}
|-
| {{large|<code>d</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|d}}{{Tree chart/end}}
| {{large|<code>*</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|*}}{{Tree chart/end}}
| {{large|<code>c</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|c}}{{Tree chart/end}}
|-
| {{large|<code>di</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|di}}{{Tree chart/end}}
| {{large|<code>i</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|i}}{{Tree chart/end}}
| {{large|<code>ic</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ic}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+'''Solid hrzntl dot vrtcl:'''
| {{large|<code>kr</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr}}{{Tree chart/end}}
| {{large|<code>r</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r}}{{Tree chart/end}}
| {{large|<code>rl</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl}}{{Tree chart/end}}
|-
| {{large|<code>k</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k}}{{Tree chart/end}}
| {{large|<code>a</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a}}{{Tree chart/end}}
| {{large|<code>l</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l}}{{Tree chart/end}}
|-
| {{large|<code>kq</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq}}{{Tree chart/end}}
| {{large|<code>q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q}}{{Tree chart/end}}
| {{large|<code>ql</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dashed hrzntl dot vrtcl:'''
| {{large|<code>kr2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr2}}{{Tree chart/end}}
| {{large|<code>r2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r2}}{{Tree chart/end}}
| {{large|<code>rl2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl2}}{{Tree chart/end}}
|-
| {{large|<code>k2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k2}}{{Tree chart/end}}
| {{large|<code>a2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a2}}{{Tree chart/end}}
| {{large|<code>l2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l2}}{{Tree chart/end}}
|-
|{{large|<code>kq2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq2}}{{Tree chart/end}}
| {{large|<code>q2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q2}}{{Tree chart/end}}
| {{large|<code>ql2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql2}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dots hrzntl solid vrtcl:'''
| {{large|<code>om</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om}}{{Tree chart/end}}
| {{large|<code>m</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m}}{{Tree chart/end}}
| {{large|<code>mp</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp}}{{Tree chart/end}}
|-
| {{large|<code>o</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o}}{{Tree chart/end}}
| {{large|<code>b</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b}}{{Tree chart/end}}
| {{large|<code>p</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p}}{{Tree chart/end}}
|-
| {{large|<code>on</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on}}{{Tree chart/end}}
| {{large|<code>n</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n}}{{Tree chart/end}}
| {{large|<code>np</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np}}{{Tree chart/end}}
|}
{| style="float: left; margin-left: 1em;"
|+ '''Dots hrzntl dashes vrtcl:'''
| {{large|<code>om2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om2}}{{Tree chart/end}}
| {{large|<code>m2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m2}}{{Tree chart/end}}
| {{large|<code>mp2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp2}}{{Tree chart/end}}
|-
| {{large|<code>o2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o2}}{{Tree chart/end}}
| {{large|<code>b2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b2}}{{Tree chart/end}}
| {{large|<code>p2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p2}}{{Tree chart/end}}
|-
| {{large|<code>on2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on2}}{{Tree chart/end}}
| {{large|<code>n2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n2}}{{Tree chart/end}}
| {{large|<code>np2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np2}}{{Tree chart/end}}
|}
{{clear}}
{|
|+ '''Miscellaneous''' (grey background not available in, or changed from, familytree):<!-- This subset is an insufficient set or questionable, but some map onto tiles that exist in {{familytree}}: -->
|-
| {{large|<code>k3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|k3}}{{Tree chart/end}}
| {{large|<code>T2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|T2}}{{Tree chart/end}}
| {{large|<code>l3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l3}}{{Tree chart/end}}
| {{large|<code>l4</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l4}}{{Tree chart/end}}
|-
| {{large|<code>G2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|G2}}{{Tree chart/end}}
| ||
| ||
| {{large|<code>b3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|b3}}{{Tree chart/end}}
|-
| {{large|<code>E</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|E}}{{Tree chart/end}}
| {{large|<code>K</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|K}}{{Tree chart/end}}
| ||
| {{large|<code>U</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|U}}{{Tree chart/end}}
|-
| {{large|<code>X</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X}}{{Tree chart/end}}
| {{large|<code>X2</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X2}}{{Tree chart/end}}
| ||
| ||
|}
==Style attributes==
The appearance of the boxes in a row may be controlled by the following optional template parameters:
* ''border'' specifies the width of the box border in pixels,
* ''boxstyle'' can be used to append arbitrary [[Cascading Style Sheets|CSS]] declarations directly to the box style attributes. For example, the following code:
<syntaxhighlight lang="wikitext">
{{Tree chart/start}}
{{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}}
{{Tree chart| | |,|-|^|-|.| | }}
{{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}}
{{Tree chart/end}}
</syntaxhighlight>
produces this chart:
{{Tree chart/start}}
{{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}}
{{Tree chart| | |,|-|^|-|.| | }}
{{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}}
{{Tree chart/end}}
Style attributes can even be set for individual boxes within each row, as in the example below:
<syntaxhighlight lang="wikitext">
{{Tree chart/start}}
{{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}}
{{Tree chart| |,|-|-|'|!|`|-|-|.| }}
{{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box
|boxstyle_RED =color:white; background-color: red;
|boxstyle_GREEN=color:yellow; background-color: green;
|boxstyle_BLUE =color:white; background-color: blue;
}}
{{Tree chart/end}}
</syntaxhighlight>
which produces this:
{{Tree chart/start}}
{{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}}
{{Tree chart| |,|-|-|'|!|`|-|-|.| }}
{{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box
|boxstyle_RED =color:white; background-color: red;
|boxstyle_GREEN=color:yellow; background-color: green;
|boxstyle_BLUE =color:white; background-color: blue;
}}
{{Tree chart/end}}
{{Warnsign|'''Note:'''}} When specifying style attributes for individual named boxes, make sure the box names are aligned to the '''left''' side of the area reserved for them in the template call (as in "<code>|RED |</code>" instead of "<code>| RED |</code>" in the example above), otherwise the template will end up looking for a style parameter with spaces in its name.
The {{tl|Tree chart/start}} template also accepts an optional {{para|style}} parameter that can be used to set CSS styles for the entire diagram, and an optional {{para|align}} parameter to set the chart alignment.
== See also ==
* [[Help:Family trees]] for other methods.
* [[User:Daduxing/familytree.js|familytree.js]], a tool for the easy creation or updating of diagrams using these templates.
* [[:Category:Family tree templates]]
* [[Template:Nerva–Antonine family tree]], a large example.
* [[Template:Tree list]]
* [[Template:Ahnentafel]]
{{Template:Graph, chart and plot templates}}
<includeonly>{{Sandbox other|
| {{When on user page | |
<!-- Categories below this line, please:-->
[[Category:Chart formatting templates| ]]
[[Category:Graph, chart and plot templates]]
[[Category:Genealogy formatting templates]]
[[Category:Templates with partial table wikitext]]
}} }}</includeonly>
4a820df0fef291101e336a1af6ecf39a8c1ac3f2
Template:When on user page
10
216
611
610
2023-06-06T14:41:12Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:When_on_user_page]]: w
wikitext
text/x-wiki
#redirect [[Template:User other]]
[[Category:User namespace templates]]
[[Category:Namespace manipulation templates]]
2cfc08fbeab39bc369817a2250cc3c2d2ae29fb1
Template:Respond
10
217
613
612
2023-06-06T14:41:13Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Respond]]: w
wikitext
text/x-wiki
<includeonly>[[File:{{{{{|safesubst:}}}#switch:{{{1|{{{icon|}}}}}}
|blackcheck = Black check.svg
|bluebrokenplus = Symbol unsupport2 vote.svg
|bluecheck2 = Cornflower blue check.svg
|bluecheck = Artículo bueno-blue.svg
|blueclock = Pictogram voting wait blue.svg
|blueplus = Symbol support2 vote.svg
|deferred = Symbol deferred.svg
|greencheck2 = Yes check.svg
|greencheck = Symbol confirmed.svg
|greenclock = Pictogram voting wait green.svg
|greenplus = Symbol support vote.svg
|greybrokenplus = Symbol unsupport vote.svg
|greyexclamation = Pictogram voting comment.svg
|info=Symbol information vote.svg
|minus = Symbol declined.svg
|neutral = Symbol neutral vote.svg
|orangeclock = Pictogram voting wait orange.svg
|orangeexclamation = Ambox important.svg
|redexclamation = Ambox important red.svg
|pinkclock = Pictogram voting wait pink.svg
|question2 = Symbol question.svg
|question = Pictogram voting question.svg
|wait = Symbol_wait.svg
|xmark2 = X mark.svg
|xmark = Symbol unrelated.svg
|yellowcheck = Yellow check.svg
|yellowclock = Pictogram voting wait.svg
|{{{1|{{{icon|Pictogram voting question.svg}}}}}}}}|{{{size|18px}}}|alt={{{alt|}}}]] '''{{{2|{{{text|Response}}}}}}'''</includeonly><noinclude>
{{Documentation}}
</noinclude>
b11f14454f435e825639a46c4fe356254a552b63
File:Ssyu0101a.png
6
61
614
118
2023-06-06T15:14:19Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Ssyu0101a.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Snat0101a.png
6
218
615
2023-06-06T15:14:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Template:Charbox
10
219
616
2023-06-06T15:17:18Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
620
616
2023-06-06T15:30:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div class="charbox">
[[File:{{{img|}}}]]
{{{name|}}}
</div>
502a959ef312966b8d8f53fb0edd5cf485077a17
621
620
2023-06-06T15:31:12Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div class="charbox">
[[File:{{{1}}}]]
{{{2}}}
</div>
64b59f59415a1365f01fe90c34185146b4005a6f
622
621
2023-06-06T15:31:32Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div class="charbox">
[[File:head_{{{1}}}.png]]
{{{2}}}
</div>
a9b17836ab8909b3a9402765c149841de102bbbe
623
622
2023-06-06T15:31:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div class="charbox">
[[File:head_{{{1}}}.png]]
{{{1}}}
</div>
f3d0fd1d0929d46947b0e7a2116adb2718513108
627
623
2023-06-06T15:36:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{!}{{{2|}}}}}]]
{{{1}}}
</div>
64b76f78a95ead3d7b8f5a1b23b50b0075ae2407
628
627
2023-06-06T15:38:10Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]]
{{{1}}}
</div>
b92827ae97893703e3f6ab6e76ae4330dfa7ac03
629
628
2023-06-06T15:39:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox"><div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]]
{{{1}}}
</div>
47b67b32536115f2656432696481b8c366501395
630
629
2023-06-06T15:39:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox" /><div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]]
{{{1}}}
</div>
8155766840ca5a0cac872f1c59e5a499a8c729e4
631
630
2023-06-06T15:40:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" /><div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]]
{{{1}}}
</div>
e1e6184f5164093a3303f8c5630e21324c9e852f
633
631
2023-06-06T15:41:25Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" /><div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]]
<span class="name">{{{1}}}</span>
</div>
7248694853f00793acef6e7f817e5f179e0f2b3f
639
633
2023-06-06T16:00:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" /><div class="charbox">
{{#if{{{3|}}}|<div class="bg"></div>}}
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]]
<span class="name">{{{1}}}</span>
</div>
518b3ed08e9338c4320781af4f5e158b132fc686
640
639
2023-06-06T16:00:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" /><div class="charbox">
{{#if:{{{3|}}}|<div class="bg"></div>}}
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]]
<span class="name">{{{1}}}</span>
</div>
ea99d7931f5ca066e2c14d7c3f66751ecbbbee50
646
640
2023-06-06T16:10:12Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" /><div class="charbox">
{{#if:{{{3|}}}|<div class="bg"></div>}}
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]]
<span class="name">{{{1}}}</span>
</div>
418cc539ebb820350f5bc4080ea90b9b56b6ebe2
647
646
2023-06-06T16:10:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" /><div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]]
<span class="name">{{{1}}}</span>
</div>
4d18a16a41ccb790592392dcbc2ae74fd2b916c2
File:Head Nana.png
6
220
617
2023-06-06T15:28:57Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
625
617
2023-06-06T15:32:56Z
Otonashi Ayana
2
Otonashi Ayana moved page [[File:Head nana.png]] to [[File:Head Nana.png]] without leaving a redirect
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Natsume.png
6
221
618
2023-06-06T15:29:00Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
626
618
2023-06-06T15:33:19Z
Otonashi Ayana
2
Otonashi Ayana moved page [[File:Head natsume.png]] to [[File:Head Natsume.png]] without leaving a redirect
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Shugo.png
6
222
619
2023-06-06T15:29:05Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
624
619
2023-06-06T15:32:36Z
Otonashi Ayana
2
Otonashi Ayana moved page [[File:Head shugo.png]] to [[File:Head Shugo.png]] without leaving a redirect
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Charbox/styles.css
10
223
632
2023-06-06T15:40:29Z
Otonashi Ayana
2
Created page with ".charbox{ } .charbox p{ display: flex; flex-direction: column; margin: 0; } .charbox img{ height: 140px; width: auto; }"
sanitized-css
text/css
.charbox{
}
.charbox p{
display: flex;
flex-direction: column;
margin: 0;
}
.charbox img{
height: 140px;
width: auto;
}
bfbd8cff151ac183861f854db88a77941f2176b8
634
632
2023-06-06T15:42:07Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
}
.charbox > p{
display: flex;
flex-direction: column;
margin: 0;
}
.charbox img{
height: 140px;
width: auto;
}
.charbox .name{
position: absolute;
bottom: 0;
text-align: center;
}
306ebee1b161b676bbad31784a9b4c84251a0e8b
635
634
2023-06-06T15:43:39Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox img{
height: 140px;
width: auto;
}
.charbox .name{
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.5);
}
0d3c997fd5259e7cc9251f17d3cd8d93c5504a6e
636
635
2023-06-06T15:44:27Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox img{
height: 140px;
width: auto;
}
.charbox .name{
display: block;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.75);
}
56a4030d88bcd69f99ca85e77bebbd836c5e4926
637
636
2023-06-06T15:46:11Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox img{
height: 140px;
width: auto;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
626e86ec5b49e49149c96d37d0be7899e4fbf6ed
638
637
2023-06-06T15:50:32Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
a37d2f5131ae3414bab4316be0440e93419ff3f0
641
638
2023-06-06T16:01:26Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
background-color:lightblue;
}
90f6a4c9c816213adbe183f5bffd798769b32625
642
641
2023-06-06T16:02:05Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
width: 100%;
height: 100%;
background-color:lightblue;
}
5f8a8ba2052a77d1aba4b6a74e5007dde114fef1
643
642
2023-06-06T16:07:32Z
Otonashi Ayana
2
sanitized-css
text/css
.charbpx{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
08aa9538ea0b83047fa7b17fed327e3bb7ce7246
644
643
2023-06-06T16:08:16Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
0acce3cd4923f4aca28640ca409b235778ca566b
Shugo Takashiro
0
62
645
585
2023-06-06T16:09:06Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}
== Relationships ==
{{Tree chart/start}}
{{Tree chart| | | | | | : | | | |}}
{{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px}}
|Shg={{charbox|Shugo|119px|y}}
|Kzn=Kazuna
|Nna={{charbox|Nana|119px}}}}
{{Tree chart/end}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
8365c8ed33badeccc8ef892ea49d43d5b46c4b98
648
645
2023-06-06T16:11:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}
== Relationships ==
{{Tree chart/start}}
{{Tree chart| | | | | | : | | | |}}
{{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn=Kazuna
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
c8cf87ad9cdf1e3e65058266d3336070bca5ba1c
649
648
2023-06-06T16:12:06Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}
== Relationships ==
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | : | | | |}}
{{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn=Kazuna
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
d9e78d1a572d2fe01bc1137b10f8c4b2edba842b
650
649
2023-06-06T16:16:35Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | : | | | |}}
{{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn=Kazuna
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
cfbcecb32d3b7656dfd172af7070d39c92606570
651
650
2023-06-06T16:23:25Z
Otonashi Ayana
2
/* Relationships */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | | : | | | |}}
{{Tree chart| | ,|- | -|- |-|+|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn=Kazuna
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
1b6054024eb6749f3a4265a36ea1b6ae75236705
652
651
2023-06-06T16:25:35Z
Otonashi Ayana
2
/* Relationships */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | : | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn=Kazuna
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
0e13a613e25a58f7450d99717ebd8659d3f323bc
Template:Infobox game
10
224
653
2023-06-06T17:13:17Z
Otonashi Ayana
2
Created page with "<includeonly>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{{title}}}'''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6..."
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''{{{title}}}'''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
63152a7f0a7bf10ab9576c5a197fb44de7943754
657
653
2023-06-06T17:21:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:#ccccff;font-weight:normal;
| headerstyle = background:#ccccff;
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
7665450a66b5cff5e3db75200e571b6d61c796eb
Template:Infobox game/doc
10
225
654
2023-06-06T17:13:24Z
Otonashi Ayana
2
Created page with "<pre> {{infobox game | title = | jtitle = | image = | developer = | publisher = | director = | writer = | artist = | composer = | platform = | release = | genre = }} </pre>"
wikitext
text/x-wiki
<pre>
{{infobox game
| title =
| jtitle =
| image =
| developer =
| publisher =
| director =
| writer =
| artist =
| composer =
| platform =
| release =
| genre =
}}
</pre>
9133e3be21e87474f7bd071ea9171e4144c3d544
655
654
2023-06-06T17:13:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
<pre>
{{infobox game
| title =
| jtitle =
| image =
| developer =
| publisher =
| director =
| writer =
| artist =
| composer =
| platform =
| release =
| genre =
}}
</pre>
ff644396bf618d131a982c63aa2743dd922f40c8
Kara no Shoujo
0
181
656
566
2023-06-06T17:20:10Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
| genre = Mystery
}}
'''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
63ae11f666c072707209dc01f0622bf5fda82fc4
659
656
2023-06-06T17:25:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
'''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
bbfb41c0b8cd5cc9fe0d850d2e17049b5471d808
Cartagra
0
194
658
575
2023-06-06T17:25:30Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Endings ==
''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End.
=== Neutral End (Hatsune) ===
=== Neutral End (Kazuna) ===
=== True End ===
Obtainable only after completing Kazuna's neutral End.
=== Bad Ends ===
; {{o|Takako|Ayasaki}} Ending (Nightmare Ending)
; {{o|Kaori|Fukamizu}} Ending (Nun Ending)
; {{o|Nana|Takashiro}} Ending
; Koyuki & Seri Ending
[[Category:Cartagra]]
35b0e18bd1312e09fc80f3a151ffebdfa877dcfb
Template:Kns characters
10
138
660
584
2023-06-06T17:28:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = {{kns}} Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Kara no Shōjo]]
[[Category:Characters]]
</includeonly>
ba1a9aceab604323f007f41d6f507868c743856b
Template:Kns
10
43
661
112
2023-06-06T17:28:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
''[[Kara no Shoujo|Kara no Shōjo]]''
2fde5e05652cc23c91fd77f7a6fcdab081010adc
Template:Kns2
10
58
662
115
2023-06-06T17:28:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
''[[Kara no Shoujo: The Second Episode|Kara no Shōjo: The Second Episode]]''
a7e5bee2bfb8a3a0a4d08fbbec349694a4ff3050
Template:Kns3
10
59
663
116
2023-06-06T17:29:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
''[[Kara no Shoujo: The Last Episode|Kara no Shōjo: The Last Episode]]''
78642b653492bd78c8eb1244ef79c2d0b94cef89
Template:Kns characters
10
138
664
660
2023-06-06T17:33:26Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#252525; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Kara no Shōjo]]
[[Category:Characters]]
</includeonly>
a9f2317ac1ee8daf80fbf973ebbc0e032f19185c
665
664
2023-06-06T17:34:10Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Kara no Shōjo]]
[[Category:Characters]]
</includeonly>
6b5785362acdf3f36ba310d7eb7941f4535e8ca5
MediaWiki:Common.css
8
7
666
565
2023-06-06T17:36:32Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting:Merienda;
--theme-color:#EFA5A5;
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
161a8537a58418dedd64f6a70f27d9cfb9a75470
674
666
2023-06-06T17:54:11Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting:Merienda;
--theme-color:#EFA5A5;
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
c70c60eb97b6a6496c5f7ff93cb13f30b14dc2e1
Template:Infobox character
10
2
667
460
2023-06-06T17:37:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''{{character name}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
df1bc89d020c5f684829630b51d44d09be5298c1
678
667
2023-06-06T18:04:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{DISPLAYTITLE:{{character name}} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
06acbd8e81fb6aa0e5afa6f31900586f639c93a1
679
678
2023-06-06T18:04:56Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
bd7b8cc02ceeb0e7a50b512b576d02e108f83238
Template:Infobox game
10
224
668
657
2023-06-06T17:37:28Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
f1a79a114fed47138d0ef0b64e0cc8fea1e26ab2
File:Head Kazuna.png
6
226
669
2023-06-06T17:41:49Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Shugo Takashiro
0
62
670
652
2023-06-06T17:41:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | : | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
4ba44d3825f952ed52a34ce69c9cac7ba52d0c17
673
670
2023-06-06T17:46:14Z
Otonashi Ayana
2
/* Relationships */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
<div class="tree-fade">
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | : | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
</div>
{{cartagra characters}}
{{kns characters|state=collapsed}}
d04bfd1f3f9f658fc543f58b6fa642cf054ff671
675
673
2023-06-06T17:54:17Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
<div class="tree-fade">
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | | | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
</div>
{{cartagra characters}}
{{kns characters|state=collapsed}}
6cb9a68a0077d6a2a20480e69544f94005f44207
676
675
2023-06-06T17:54:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname =
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
<div class="tree-fade">
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | ! | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
</div>
{{cartagra characters}}
{{kns characters|state=collapsed}}
765cb5a801fbcd83836fd24b7e890ce3bd3e4f44
Kazuna Kozuki
0
227
671
2023-06-06T17:42:14Z
Otonashi Ayana
2
Redirected page to [[Kazuna Takashiro]]
wikitext
text/x-wiki
#REDIRECT [[Kazuna Takashiro]]
f41c0fc8cd906e8309bdb494e7459cccd0c1b877
File:Head Nana.png
6
220
672
625
2023-06-06T17:44:43Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Head Nana.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Cartagra characters
10
201
677
579
2023-06-06T18:02:14Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters
| state = autocollapse
| listclass = hlist
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
* {{n|Kazuna|Kozuki}}
* {{n|Yura|Kozuki}}
* {{n|Nana|Takashiro}}
* {{n|Takako|Ayasaki}}
* {{n|Kaori|Fukamizu}}
* {{n|Tokiko|Shigusa}}
* {{n|Akao|Ikuma}}
* [[Takoyaki vendor]]
| group2 = Yukishiro
| list2 =
* [[Ujaku]]
* [[Rin]]
* [[Otoha]]
* [[Koyuki]]
* [[Seri]]
| group3 = Police
| list3 =
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
}}<includeonly>
[[Category:Cartagra]]
[[Category:Characters]]
</includeonly>
41388079881edca9b7e1ca359249d92372966621
File:Tako cartagra.png
6
228
680
2023-06-06T18:07:22Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Infobox character/doc
10
169
681
421
2023-06-06T18:08:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
<pre>
{{infobox character
| given name =
| family name =
| jname =
| image = [[File:|x300px]]
| aka =
| gender =
| age =
| appearance =
| seiyu =
| relations =
}}</pre>
8b96551308f14f2425b0669356179aa4650d19c3
Daisaku Arata
0
229
682
2023-06-06T18:08:18Z
Otonashi Ayana
2
Created page with "{{infobox character | name = Takoyaki vendor | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart. {{cartagra characters}}"
wikitext
text/x-wiki
{{infobox character
| name = Takoyaki vendor
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender =
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart.
{{cartagra characters}}
d910a608ff5fa71ef112719d88d1df529bba628b
Cartagra
0
194
683
658
2023-06-06T18:13:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Premise ==
== Characters ==
== Endings ==
''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End.
=== Neutral End (Hatsune) ===
=== Neutral End (Kazuna) ===
=== True End ===
Obtainable only after completing Kazuna's neutral End.
=== Bad Ends ===
; {{o|Takako|Ayasaki}} Ending (Nightmare Ending)
; {{o|Kaori|Fukamizu}} Ending (Nun Ending)
; {{o|Nana|Takashiro}} Ending
; Koyuki & Seri Ending
[[Category:Cartagra]]
845fc4bb8cd48b93cb23a9c777501ed38a7faf7a
684
683
2023-06-06T18:14:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Premise ==
== Characters ==
== See also ==
* [[Cartagra/Endings|Endings]]
[[Category:Cartagra]]
721a021be659838bfe230fc95eaeadd48a31ee3c
Cartagra/Endings
0
230
685
2023-06-06T18:14:52Z
Otonashi Ayana
2
Created page with "''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending"
wikitext
text/x-wiki
''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End.
=== Neutral End (Hatsune) ===
=== Neutral End (Kazuna) ===
=== True End ===
Obtainable only after completing Kazuna's neutral End.
=== Bad Ends ===
; {{o|Takako|Ayasaki}} Ending (Nightmare Ending)
; {{o|Kaori|Fukamizu}} Ending (Nun Ending)
; {{o|Nana|Takashiro}} Ending
; Koyuki & Seri Ending
14ff03c831beec221a64a2b2f471ee4de98a48b6
Template:Nihongo
10
231
687
686
2023-06-06T18:16:20Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Nihongo]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Nihongo|nihongo}}</includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata. -->
</noinclude>
d0dcc4933a65afd93128f90aa7ce4ba2c8bd20e7
Template:Literal translation
10
232
689
688
2023-06-06T18:16:20Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Literal_translation]]: w
wikitext
text/x-wiki
{{#if:{{{sortable|}}}
|<span style="display:none;">{{{1|}}}</span>
}}{{#if:{{{i|}}}
|<nowiki/>''
}}{{abbr|style=font-size:85%|{{#switch:{{{lk|}}}
|yes|on = [[Literal translation|lit.]]
|#default = lit.
}}|literal translation}}{{#if:{{{i|}}}
|''<nowiki/>
}}{{#if:{{{1|}}}
| {{thinsp}}<nowiki>'</nowiki>{{{1}}}{{#if:{{str endswith|{{{1}}}|''}}|{{'}}|'}}
}}{{#if:{{{2|}}}
| {{sp}} or <nowiki>'</nowiki>{{{2}}}{{#if:{{str endswith|{{{2}}}|''}}|{{'}}|'}}
}}{{#if:{{{3|}}}
| {{sp}} or <nowiki>'</nowiki>{{{3}}}{{#if:{{str endswith|{{{3}}}|''}}|{{'}}|'}}
}}{{#if:{{{4|}}}
| {{sp}} or <nowiki>'</nowiki>{{{4}}}{{#if:{{str endswith|{{{4}}}|''}}|{{'}}|'}}
}}<noinclude>
{{Documentation}}
</noinclude>
1a7e9904a6e7bb60117c687c5c373fb9cf76c44c
Template:Abbr
10
233
691
690
2023-06-06T18:16:21Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Abbr]]: w
wikitext
text/x-wiki
<abbr {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} title="{{#tag:nowiki|{{#invoke:String|replace|{{{2|}}}|"|"}}}}">{{{1|}}}</abbr><noinclude>{{Documentation}}
</noinclude>
5fd53aa19ba927ce3eea9092a4fa31f881df0a6e
Template:Thinsp
10
234
693
692
2023-06-06T18:16:22Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Thinsp]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Thin space]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
2469064d969db6a9cf1e47e2d1ee0a5e2c9eb495
Template:Thin space
10
235
695
694
2023-06-06T18:16:23Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Thin_space]]: w
wikitext
text/x-wiki
<span style="white-space: nowrap;">{{#if:{{{1|}}}|{{#if:{{{2|}}}|| }}}}{{{1|}}} <!--
-->{{#if:{{{2|}}}|{{{2}}}}}{{#if:{{{3|}}}| {{{3}}}}}<!--
-->{{#if:{{{4|}}}| {{{4}}}}}{{#if:{{{5|}}}| {{{5}}}}}<!--
-->{{#if:{{{6|}}}| {{{6}}}}}{{#if:{{{7|}}}| {{{7}}}}}<!--
-->{{#if:{{{8|}}}| {{{8}}}}}{{#if:{{{9|}}}| {{{9}}}}}<!--
-->{{#if:{{{10|}}}| {{{10}}}}}</span><noinclude>
{{Documentation}}
<!-- Please add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
5f135f79d223a744b75485254555580623480420
Template:Str endswith
10
236
697
696
2023-06-06T18:16:24Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Str_endswith]]: w
wikitext
text/x-wiki
{{#ifeq:{{{1|a}}}{{{2|a}}}|{{{1|b}}}{{{2|b}}}|{{#invoke:String|endswith|source={{{1}}}|pattern={{{2}}} }}|yes<!--backward compatibility -->}}<noinclude>
{{documentation}}
</noinclude>
13dfad2dc8c562869bc85a37524258ffebf9a62f
Module:Lang
828
237
699
698
2023-06-06T18:16:25Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Lang]]: w
Scribunto
text/plain
--[=[
Lua support for the {{lang}}, {{lang-xx}}, and {{transl}} templates and replacement of various supporting templates.
]=]
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local unicode = require ("Module:Unicode data"); -- for is_latin() and is_rtl()
local yesno = require ('Module:Yesno');
local lang_data = mw.loadData ('Module:Lang/data'); -- language name override and transliteration tool-tip tables
local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts
local lang_table = lang_data.lang_name_table.lang;
local lang_dep_table = lang_data.lang_name_table.lang_dep;
local script_table = lang_data.lang_name_table.script;
local region_table = lang_data.lang_name_table.region;
local variant_table = lang_data.lang_name_table.variant;
local suppressed_table = lang_data.lang_name_table.suppressed;
local override_table = lang_data.override;
local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code
local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization
local content_lang = mw.language.getContentLanguage();
local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag
local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction
local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic()
local maint_cats = {}; -- maintenance categories go here
local maint_msgs = {}; -- and their messages go here
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
]]
local function is_set( var )
return not (var == nil or var == '');
end
--[[--------------------------< I N V E R T _ I T A L I C S >-------------------------------------------------
This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup
in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing
apostrophes are converted to their html numeric entity equivalent so that the new italic markup doesn't become
bold markup inadvertently.
Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal,
replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements.
In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns.
This function expects that markup in args.text is complete and correct; if it is not, oddness may result.
]]
local function invert_italics (source)
local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns
[""]="\'\'", -- empty string becomes italic markup
["\'\'"]="", -- italic markup becomes empty string
["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic
["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold
};
local seg = {};
source = source:gsub ("%f[\']\'%f[^\']", '''); -- protect single quote marks from being interpreted as bold markup
seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote
seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote
if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text'
seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup
elseif '' ~= seg[1] then
seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup
elseif '' ~= seg[3] then
seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup
else
seg[2] = source -- when there is no markup
end
seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table
seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table
return table.concat (seg); -- put it all back together and done
end
--[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------
validates |italic= or |italics= assigned values.
When |italic= is set and has an acceptible assigned value, return the matching css font-style property value or,
for the special case 'default', return nil.
When |italic= is not set, or has an unacceptible assigned value, return nil and a nil error message.
When both |italic= and |italics= are set, returns nil and a 'conflicting' error message.
The return value nil causes the calling lang, lang_xx, or transl function to set args.italic according to the template's
defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-xx}} depending on
the individual template's requirements, 'italic' for {{transl}}) or to the value appropriate to |script=, if set ({{lang}}
and {{lang-xx}} only).
Accepted values and the values that this function returns are are:
nil - when |italic= absent or not set; returns nil
default - for completeness, should rarely if ever be used; returns nil
yes - force args.text to be rendered in italic font; returns 'italic'
no - force args.text to be rendered in normal font; returns 'normal'
unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit'
invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert'
]]
local function validate_italic (args)
local properties = {['yes'] = 'italic', ['no'] = 'normal', ['unset'] = 'inherit', ['invert'] = 'invert', ['default'] = nil};
local count = 0
for _, arg in pairs {'italic', 'italics', 'i'} do
if args[arg] then
count = count + 1
end
end
if count > 1 then -- return nil and an error message if more than one is set
return nil, 'only one of |italic=, |italics=, or |i= can be specified';
end
return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message
end
--[=[--------------------------< V A L I D A T E _ C A T _ A R G S >----------------------------------------------------------
Default behavior of the {{lang}} and {{lang-xx}} templates is to add categorization when the templates are used in mainspace.
This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters
to control categorization.
Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative
values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the
parameter is treated as if it were not set in the template.
Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply.
Accepted values for |nocat= are the text strings:
'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else
for |cat=
'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else
]=]
local function validate_cat_args (args)
if not (args.nocat or args.cat) then -- both are nil, so categorize
return;
end
if false == yesno (args.cat) or true == yesno (args.nocat) then
args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template)
else -- args.nocat is the parameter actually used.
args.nocat = nil;
end
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack
]]
local function in_array ( needle, haystack )
if needle == nil then
return false;
end
for n,v in ipairs( haystack ) do
if v == needle then
return n;
end
end
return false;
end
--[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------
prettify ietf tags to use recommended subtag formats:
code: lower case
script: sentence case
region: upper case
variant: lower case
private: lower case prefixed with -x-
]]
local function format_ietf_tag (code, script, region, variant, private)
local out = {};
if is_set (private) then
return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored
end
table.insert (out, code:lower());
if is_set (script) then
script = script:lower():gsub ('^%a', string.upper);
table.insert (out, script);
end
if is_set (region) then
table.insert (out, region:upper());
end
if is_set (variant) then
table.insert (out, variant:lower());
end
return table.concat (out, '-');
end
--[[--------------------------< G E T _ I E T F _ P A R T S >--------------------------------------------------
extracts and returns IETF language tag parts:
primary language subtag (required) - 2 or 3 character IANA language code
script subtag - four character IANA script code
region subtag - two-letter or three digit IANA region code
variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported
private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag
in any one of these forms
lang lang-variant
lang-script lang-script-variant
lang-region lang-region-variant
lang-script-region lang-script-region-variant
lang-x-private
each of lang, script, region, variant, and private, when used, must be valid
Languages with both two- and three-character code synonyms are promoted to the two-character synonym because
the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding
the synonymous three-character codes in the lang= attribute.
For {{lang-xx}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}}
because those parameters are superfluous to the IETF subtags in |code=)
returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid
parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil.
see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1
]]
local function get_ietf_parts (source, args_script, args_region, args_variant)
local code, script, region, variant, private; -- ietf tag parts
if not is_set (source) then
return nil, nil, nil, nil, nil, 'missing language tag';
end
local pattern = { -- table of tables holding acceptibe ietf tag patterns and short names of the ietf part captured by the pattern
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits)
{'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss
{'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR
{'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits)
{'^(%a%a%a?)$'}, -- 18 - ll
{'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters)
}
local t = {}; -- table of captures; serves as a translator between captured ietf tag parts and named variables
for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match
local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here
c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i])
if c1 then -- c1 always set on match
code = c1; -- first capture is always code
t = {
[pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures
[pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures
[pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table
};
script = t.s or ''; -- translate table contents to named variables;
region = t.r or ''; -- absent table entries are nil so set named ietf parts to empty string for concatenation
variant= t.v or '';
private = t.p or '';
break; -- and done
end
end
if not code then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language tag: ', source}); -- don't know what we got but it is malformed
end
code = code:lower(); -- ensure that we use and return lower case version of this
if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language code: ', code}); -- invalid language code, don't know about the others (don't care?)
end
if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym
table.insert (maint_cats, table.concat ({'Lang and lang-xx code promoted to ISO 639-1|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]}));
code = synonym_table[code]; -- use the synonym
end
if is_set (script) then
if is_set (args_script) then
return code, nil, nil, nil, nil, 'redundant script tag'; -- both code with script and |script= not allowed
end
else
script = args_script or ''; -- use args.script if provided
end
if is_set (script) then
script = script:lower(); -- ensure that we use and return lower case version of this
if not script_table[script] then
return code, nil, nil, nil, nil, table.concat ({'unrecognized script: ', script, ' for code: ', code}); -- language code ok, invalid script, don't know about the others (don't care?)
end
end
if suppressed_table[script] then -- ensure that code-script does not use a suppressed script
if in_array (code, suppressed_table[script]) then
return code, nil, nil, nil, nil, table.concat ({'script: ', script, ' not supported for code: ', code}); -- language code ok, script is suppressed for this code
end
end
if is_set (region) then
if is_set (args_region) then
return code, nil, nil, nil, nil, 'redundant region tag'; -- both code with region and |region= not allowed
end
else
region = args_region or ''; -- use args.region if provided
end
if is_set (region) then
region = region:lower(); -- ensure that we use and return lower case version of this
if not region_table[region] then
return code, script, nil, nil, nil, table.concat ({'unrecognized region: ', region, ' for code: ', code});
end
end
if is_set (variant) then
if is_set (args_variant) then
return code, nil, nil, nil, nil, 'redundant variant tag'; -- both code with variant and |variant= not allowed
end
else
variant = args_variant or ''; -- use args.variant if provided
end
if is_set (variant) then
variant = variant:lower(); -- ensure that we use and return lower case version of this
if not variant_table[variant] then -- make sure variant is valid
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant});
end -- does this duplicate/replace tests in lang() and lang_xx()?
if is_set (script) then -- if script set it must be part of the 'prefix'
if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-script pair: ', code, '-', script});
end
elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound)
if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred)
if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound)
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-region pair: ', code, '-', region});
end
end
else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0
if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code: ', code});
end
end
end
if is_set (private) then
private = private:lower(); -- ensure that we use and return lower case version of this
if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index
return code, script, region, nil, nil, table.concat ({'unrecognized private tag: ', private});
end
end
return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil
end
--[[--------------------------< M A K E _ E R R O R _ M S G >--------------------------------------------------
assembles an error message from template name, message text, help link, and error category.
]]
local function make_error_msg (msg, args, template)
local out = {};
local category;
if 'Transl' == template then
category = 'Transl';
else
category = 'Lang and lang-xx'
end
table.insert (out, table.concat ({'[', args.text or 'undefined', '] '})); -- for error messages output args.text if available
table.insert (out, table.concat ({'<span style=\"color:#d33\">Error: {{', template, '}}: '}));
table.insert (out, msg);
table.insert (out, table.concat ({' ([[:Category:', category, ' template errors|help]])'}));
table.insert (out, '</span>');
if (0 == namespace or 10 == namespace) and not args.nocat then -- categorize in article space (and template space to take care of broken usages)
table.insert (out, table.concat ({'[[Category:', category, ' template errors]]'}));
end
return table.concat (out);
end
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
empty string.
]=]
local function make_wikilink (link, display)
if is_set (link) then
if is_set (display) then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
else
return '';
end
end
--[[--------------------------< D I V _ M A R K U P _ A D D >--------------------------------------------------
adds <i> and </i> tags to list-item text or to implied <p>..</p> text. mixed not supported
]]
local function div_markup_add (text, style)
local implied_p = {};
if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text
if 'italic' == style then
return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item
else
return text;
end
end
if text:find ('\n+') then -- look for any number of \n characters in text
text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics mediawiki
if 'italic' == style then
text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each impled p (two or more consecutive '\n\n' sequences)
else
text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each impled p
text = text:gsub ('\n', ''); -- strip newline characters
end
end
return text;
end
--[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------
makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where
<title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in
html markup. This because the lang= attibute applies to the content of its enclosing tag.
<tag> holds a string 'div' or 'span' used to choose the correct wrapping tag
]]
local function title_wrapper_make (title_text, content_text, tag)
local wrapper_t = {};
table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag
table.insert (wrapper_t, ' title=\"'); -- begin title attribute
table.insert (wrapper_t, title_text); -- add <title_text>
table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag
table.insert (wrapper_t, content_text); -- add <content_text>
table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag
return table.concat (wrapper_t); -- make a big string and done
end
--[[--------------------------< M A K E _ T E X T _ H T M L >--------------------------------------------------
Add the html markup to text according to the type of content that it is: <span> or <i> tags for inline content or
<div> tags for block content
The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish
language text' is English:
<i lang="es" title="Spanish language text">casa</i>
should be:
<span title="Spanish language text"><i lang="es">casa</i></span>
or for <div>...</div>:
<div title="Spanish language text"><div lang="es"><spanish-language-text></div></div>
]]
local function make_text_html (code, text, tag, rtl, style, size, language)
local html_t = {};
local style_added = '';
local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div
if text:match ('^%*') then
table.insert (html_t, '*'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki
text = text:gsub ('^%*', ''); -- remove the splat from the text
end
if 'span' == tag then -- default html tag for inline content
if 'italic' == style then -- but if italic
tag = 'i'; -- change to <i> tags
end
else -- must be div so go
text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i>
end
table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> html tag
code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of wikipedia
table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute
if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki
table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages
elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki
table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages
end
if 'normal' == style then -- when |italic=no
table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
if is_set (size) then -- when |size=<something>
if is_set (style_added) then
table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted
else
table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
end
table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening html tag
table.insert (html_t, text); -- insert the text
table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> html tag
if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div
local title_text;
if 'zxx' == code then -- special case for this tag 'no linguistic content'
title_text = table.concat ({language, ' text'}); -- not a language so don't use 'language' in title text
elseif mw.ustring.find (language, 'languages', 1, true) then
title_text = table.concat ({language, ' collective text'}); -- for collective languages
else
title_text = table.concat ({language, '-language text'}); -- for individual languages
end
return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag);
else
return table.concat (html_t);
end
end
--[=[-------------------------< M A K E _ C A T E G O R Y >----------------------------------------------------
For individual language, <language>, returns:
[[Category:Articles containing <language>-language text]]
for English:
[[Category:Articles containing explicitly cited English-language text]]
for ISO 639-2 collective languages (and for 639-1 bh):
[[Category:Articles with text in <language> languages]]
]=]
local function make_category (code, language_name, nocat, name_get)
local cat = {};
local retval;
if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space
return ''; -- return empty string for concatenation
end
if mw.ustring.find (language_name, 'languages', 1, true) then
return table.concat ({'[[Category:Articles with text in ', language_name, ']]'});
end
table.insert (cat, '[[Category:Articles containing ');
if this_wiki_lang_tag == code then
table.insert (cat, 'explicitly cited ' .. language_name); -- unique category name for the local language
else
table.insert (cat, language_name);
end
table.insert (cat, '-language text]]');
return table.concat (cat);
end
--[[--------------------------< M A K E _ T R A N S L I T >----------------------------------------------------
return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string
The value |script= is not used in {{transl}} for this purpose; instead it uses |code. Because language scripts
are listed in the {{transl}} switches they are included in the data tables. The script parameter is introduced
at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code.
To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed
to be |translit-script= (in this function, tscript)
This function is used by both lang_xx() and transl()
lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style
transl() always provides language_name, translit, and one of code or tscript, never both; always provides style
For {{transl}}, style only applies when a language code is provided
]]
local function make_translit (code, language_name, translit, std, tscript, style)
local title;
local out_t = {};
local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local title_text = ''; -- tool tip text for title= attribute
std = std and std:lower(); -- lower case for table indexing
if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified
title_text = language_name; -- write a generic tool tip
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' romanization'; -- finish the tool tip; use romanization when neither script nor standard supplied
elseif is_set (std) and is_set (tscript) then -- when both are specified
if title_t[std] then -- and if standard is legitimate
if title_t[std][tscript] then -- and if script for that standard is legitimate
if script_table[tscript] then
title_text = title_text .. table.concat ({title_t[std][tscript:lower()], ' (', script_table[tscript], ' script) transliteration'}); -- add the appropriate text to the tool tip
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
return ''; -- invalid standard, setup for error message
end
elseif is_set (std) then -- translit-script not set, use language code
if not title_t[std] then return ''; end -- invalid standard, setup for error message
if title_t[std][code] then -- if language code is in the table (transl may not provide a language code)
title_text = title_text .. table.concat ({title_t[std][code:lower()], ' (', language_name, ' language) transliteration'}); -- add the appropriate text to the tool tip
else -- code doesn't match
title_text = title_text .. title_t[std]['default']; -- so use the standard's default
end
else -- here if translit-script set but translit-std not set
if title_t['no_std'][tscript] then
title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set
elseif title_t['no_std'][code] then
title_text = title_text .. title_t['no_std'][code]; -- use language code
else
if is_set (tscript) then
title_text = title_text .. table.concat ({language_name, '-script transliteration'}); -- write a script tool tip
elseif is_set (code) then
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' transliteration'; -- finish the tool tip
else
title_text = title_text .. ' transliteration'; -- generic tool tip (can we ever get here?)
end
end
end
local close_tag;
if is_set (code) then -- when a language code is provided (always with {{lang-xx}} templates, not always with {{transl}})
code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag
if not style then -- nil for the default italic style
table.insert (out_t, "<i lang=\""); -- so use <i> tag
close_tag = '</i>'; -- tag to be used when closing
else
table.insert (out_t, table.concat ({'<span style=\"font-style: ', style, '\" lang=\"'})); -- non-standard style, construct a span tag for it
close_tag = '</span>'; -- tag to be used when closing
end
table.insert (out_t, code);
table.insert (out_t, "-Latn\">"); -- transliterations are always Latin script
else
table.insert (out_t, "<span>"); -- when no language code: no lang= attribute, not italic ({{transl}} only)
close_tag = '</span>';
end
table.insert (out_t, translit); -- add the translit text
table.insert (out_t, close_tag); -- and add the appropriate </i> or </span>
if '' == title_text then -- when there is no need for a tool-tip
return table.concat (out_t); -- make a string and done
else
return title_wrapper_make (title_text, table.concat (out_t), 'span'); -- wrap with a tool-tip span and don
end
end
--[[--------------------------< V A L I D A T E _ T E X T >----------------------------------------------------
This function checks the content of args.text and returns empty string if nothing is amiss else it returns an
error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup.
Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text
either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert.
]]
local function validate_text (template, args)
if not is_set (args.text) then
return make_error_msg ('no text', args, template);
end
if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes
return make_error_msg ('text has malformed markup', args, template);
end
local style = args.italic;
if ('unset' ~= style) and ('invert' ~=style) then
if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic
return make_error_msg ('text has italic markup', args, template);
end
end
end
--[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------
render mainenance messages and categories
]]
local function render_maint(nocat)
local maint = {};
if 0 < #maint_msgs then -- when there are maintenance messages
table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag
for _, msg in ipairs (maint_msgs) do
table.insert (maint, table.concat ({msg, ' '})); -- add message strings
end
table.insert (maint, '</span>'); -- close the span
end
if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only
for _, cat in ipairs (maint_cats) do
table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories
end
end
return table.concat (maint);
end
--[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------
for proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat
will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we
do nothing
proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and / or inhibits
regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac
]]
local function proto_prefix (text, language_name, proto_param)
if false == proto_param then -- when forced by |proto=no
return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text
elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes
return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats
end
return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat
end
--[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------
looks for a poem strip marker in text; returns true when found; false else
auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know
the content that will replace the stripmarker.
]]
local function has_poem_tag (text)
return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false;
end
--[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------
Inspects content of and selectively trims text. Returns text and the name of an appropriate html tag for text.
If text contains:
\n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return
If text begins with list markup:
\n* unordered
\n; definition
\n: definition
\n# ordered
trim all leading whitespace except \n and trim all trailing whitespace
If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because
the stripmarker is replaced with text wrapped in <div>..</div> tags.
If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div>
tags are used to wrap it, to prevent div/span inversion.
]]
local function html_tag_select (text)
local tag;
if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that)
tag = 'div'; -- poem replacement is in div tags so lang must use div tags
elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags
tag = 'div';
elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags
text = mw.text.trim (text); -- trim leading and trailing whitespace characters
tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags
elseif text:find ('\n[%*:;%#]') then -- if text has list markup
text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n'
tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki)
else
text = mw.text.trim (text); -- plain text
tag = 'span'; -- so span is fine
end
return text, tag;
end
--[[--------------------------< V A L I D A T E _ P R O T O >--------------------------------------------------
validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false,
empty string (or parameter omitted) returns as nil; any other value returns as nil with a second return value of
true indicating that some other value has been assigned to |proto=
]]
local function validate_proto (proto_param)
if 'yes' == proto_param then
return true;
elseif 'no' == proto_param then
return false;
elseif is_set (proto_param) then
return nil, true; -- |proto= something other than 'yes' or 'no'
else
return nil; -- missing or empty
end
end
--[[--------------------------< L A N G U A G E _ N A M E _ G E T >--------------------------------------------
common function to return language name from the data set according to IETF tag
returns language name if found in data tables; nil else
]]
local function language_name_get (ietf, code, cat)
ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case
local name; -- remains nil if not found
if override_table[ietf] then -- look for whole IETF tag in override table
name = override_table[ietf];
elseif override_table[code] then -- not there so try basic language tag
name = override_table[code];
elseif lang_table[code] then -- shift to iana active tag/name table
name = lang_table[code];
elseif lang_dep_table[code] then -- try the iana deprecated tag/name table
name = lang_dep_table[code];
end
if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name
table.insert (maint_cats, table.concat ({'Lang and lang-xx using deprecated ISO 639 codes|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' is deprecated'}));
end
return name; -- name from data tables or nil
end
--[[--------------------------< _ L A N G >--------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function _lang (args)
local out = {};
local language_name; -- used to make category names
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, variant, and private
local code; -- the language code
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
validate_cat_args (args); -- determine if categorization should be suppressed
if args[1] and args.code then
return make_error_msg ('conflicting: {{{1}}} and |code=', args, template);
else
args.code = args[1] or args.code; -- prefer args.code
end
if args[2] and args.text then
return make_error_msg ('conflicting: {{{2}}} and |text=', args, template);
else
args.text = args[2] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set
if is_set (msg) then -- msg is an already-formatted error message
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}})
if msg then
return make_error_msg ( msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and unicode.is_Latin (args.text)) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics)
args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
if is_set (subtags.script) then -- if script set, override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
if 'invert' == args.italic and 'span' == tag then -- invert only supported for in-line content
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name));
table.insert (out, make_category (code, language_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G >----------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function lang (frame)
local args = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text
valueFunc = function (key, value)
if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return _lang (args);
end
--[[--------------------------< T R A N S L A T I O N _ M A K E >----------------------------------------------
stand-alone function to create literal translation of main text
Also used by {{lang-x2}}
]]
local function translation_make (args_t)
local translation_t = {', '}; -- initialize output
if 'none' ~= args_t.label then -- if we want a label
table.insert (translation_t, '<small>'); -- open the <small> html tag
if 'no' == args_t.link then
table.insert (translation_t, '<abbr title="literal translation">lit.</abbr>'); -- unlinked form
else
table.insert (translation_t, make_wikilink ('Literal translation', 'lit.')); -- linked form
end
table.insert (translation_t, " </small>"); -- close the <small> html tag
end
table.insert (translation_t, table.concat ({''', args_t.translation, '''})); -- use html entities to avoid wiki markup confusion
return table.concat (translation_t); -- make a big string and done
end
--[[--------------------------< L A N G _ X X >----------------------------------------------------------------
For the {{lang-xx}} templates, the only parameter required to be set in the template is the language code. All
other parameters can, usually should, be written in the template call. For {{lang-xx}} templates for languages
that can have multiple writing systems, it may be appropriate to set |script= as well.
For each {{lang-xx}} template choose the appropriate entry-point function so that this function knows the default
styling that should be applied to text.
For normal, upright style:
<includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly>
For italic style:
<includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly>
All other parameters should be received from the template's frame (parent frame)
Supported parameters are:
|code = (required) the IANA language code
|script = IANA script code; especially for use with languages that use multiple writing systems
|region = IANA region code
|variant = IANA variant code
|text = (required) the displayed text in language specified by code
|link = boolean false ('no') does not link code-spcified language name to associated language article
|rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language
|nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected
|cat = boolian false ('no') opposite form of |nocat=
|italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state
|lit = text that is a literal translation of text
|label = 'none' to suppress all labeling (language name, 'translit.', 'lit.')
any other text replaces language-name label - automatic wikilinking disabled
for those {{lang-xx}} templates that support transliteration (those templates where |text= is not entirely latn script):
|translit = text that is a transliteration of text
|translit-std = the standard that applies to the transliteration
|translit-script = ISO 15924 script name; falls back to code
For {{lang-xx}}, the positional parameters are:
{{{1}}} text
{{{2}}} transliterated text
{{{3}}} literal translation text
no other positional parameters are allowed
]]
local function _lang_xx (args)
local out = {};
local language_name; -- used to make display text, article links
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, and variant
local code; -- the language code
local translit_script_name; -- name associated with IANA (ISO 15924) script code
local translit;
local translit_title;
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang-xx';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if args[1] and args.text then
return make_error_msg ('conflicting: {{{1}}} and |text=', args, template);
else
args.text = args[1] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding
if is_set (msg) then
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
if args[2] and args.translit then
return make_error_msg ('conflicting: {{{2}}} and |translit=', args, template);
else
args.translit = args[2] or args.translit -- prefer args.translit
end
if args[3] and (args.translation or args.lit) then
return make_error_msg ('conflicting: {{{3}}} and |lit= or |translation=', args, template);
elseif args.translation and args.lit then
return make_error_msg ('conflicting: |lit= and |translation=', args, template);
else
args.translation = args[3] or args.translation or args.lit; -- prefer args.translation
end
if args.links and args.link then
return make_error_msg ('conflicting: |links= and |link=', args, template);
else
args.link = args.link or args.links; -- prefer args.link
end
validate_cat_args (args); -- determine if categorization should be suppressed
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- args.italic controls
if is_set (subtags.script) then
if 'latn' == subtags.script then
args.italic = 'italic'; -- |script=Latn; set for font-style:italic
else
args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state>
end
else
args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state>
end
end
if is_set (subtags.script) then -- if script set override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any)
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if args.label then
if 'none' ~= args.label then
table.insert (out, table.concat ({args.label, ': '})); -- custom label
end
else
if 'no' == args.link then
table.insert (out, language_name); -- language name without wikilink
else
if mw.ustring.find (language_name, 'languages', 1, true) then
table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data
else
table.insert (out, make_wikilink (language_name .. ' language', language_name)); -- language name with wikilink
end
end
table.insert (out, ': '); -- separator
end
if 'invert' == args.italic then
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil))
if is_set (args.translit) and not unicode.is_Latin (args.text) then -- transliteration (not supported in {{lang}}); not supported when args.text is wholly latn text (this is an imperfect test)
table.insert (out, ', '); -- comma to separate text from translit
if 'none' ~= args.label then
table.insert (out, '<small>');
if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name
translit_script_name = script_table[args['translit-script']];
else
translit_script_name = language_name; -- fall back on language name
end
translit_title = mw.title.makeTitle (0, table.concat ({'Romanization of ', translit_script_name})); -- make a title object
if translit_title.exists and ('no' ~= args.link) then
table.insert (out, make_wikilink ('Romanization of ' .. translit_script_name or language_name, 'romanized') .. ':'); -- make a wikilink if there is an article to link to
else
table.insert (out, 'romanized:'); -- else plain text
end
table.insert (out, ' </small>'); -- close the small tag
end
translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'])
if is_set (translit) then
table.insert (out, translit);
else
return make_error_msg (table.concat ({'invalid translit-std: \'', args['translit-std'] or '[missing]'}), args, template);
end
end
if is_set (args.translation) then -- translation (not supported in {{lang}})
table.insert (out, translation_make (args));
end
table.insert (out, make_category (code, category_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G _ X X _ A R G S _ G E T >----------------------------------------------
common function to get args table from {{lang-??}} templates
returns table of args
]]
local function lang_xx_args_get (frame)
local args = getArgs(frame,
{
parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}}
valueFunc = function (key, value)
if 1 == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return args;
end
--[[--------------------------< L A N G _ X X _ I T A L I C >--------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_italic(). Sets the initial style state to italic.
]]
local function lang_xx_italic (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------
Entry point ffrom another module. Sets the initial style state to italic.
]]
local function _lang_xx_italic (args)
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_inherit(). Sets the initial style state to inherit.
]]
local function lang_xx_inherit (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I N H E R I T >----------------------------------------------
Entry point from another module. Sets the initial style state to inherit.
]]
local function _lang_xx_inherit (args)
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------
Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _is_ietf_tag (tag) -- entry point when this module is require()d into another
local c, s, r, v, p, err; -- code, script, region, variant, private, error message
c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate
return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else
end
--[[--------------------------< I S _ I E T F _ T A G >--------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_ietf_tag (frame)
return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the ietf language tag to be tested; also get parent frame
end
--[[--------------------------< I S _ I E T F _ T A G _ F R A M E >--------------------------------------------
Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent
(template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag>
is in the parent frame.
]]
local function is_ietf_tag_frame (frame)
return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the ietf language tag to be tested; do not get parent frame
end
--[[--------------------------< _ N A M E _ F R O M _ T A G >--------------------------------------------------
Returns language name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Set invoke's |link= parameter to yes to get wikilinked version of the language name.
Module entry point from another module
]]
local function _name_from_tag (args)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args['link']; -- make a boolean
local label = args.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local language_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
language_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if link then -- when |link=yes, wikilink the language name
if mw.ustring.find (language_name, 'languages', 1, true) then
language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data
else
language_name = make_wikilink (language_name .. ' language', label or language_name); -- language name with wikilink
end
end
return language_name;
end
--[[--------------------------< N A M E _ F R O M _ T A G >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function name_from_tag (frame) -- entry point from an {{#invoke:Lang|name_from_tag|<ietf tag>|link=<yes>|template=<template name>}}
return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< _ T A G _ F R O M _ N A M E >--------------------------------------------------
Returns the ietf language tag associated with the language name. Spelling of language name must be correct
according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator,
that disambiguator must be omitted (they are not present in the data name-to-tag tables).
Module entry point from another module
]]
local function _tag_from_name (args) -- entry point from another module
local msg;
if args[1] and '' ~= args[1] then
local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live
local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct)
local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard
if tag then
return tag, true; -- language name found so return tag and done; second return used by is_lang_name()
else
msg = 'language: ' .. args[1] .. ' not found' -- language name not found, error message
end
else
msg = 'missing language name' -- language name not provided, error message
end
local template = '';
if args.template and '' ~= args.template then
template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template)
end
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
--[[--------------------------< T A G _ F R O M _ N A M E >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function tag_from_name (frame) -- entry point from an {{#invoke:Lang|tag_from_name|<language name>|link=<yes>|template=<template name>}}
local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name()
return result;
end
--[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_lang_name (frame)
local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name()
return result and true or nil;
end
--[[--------------------------< _ T R A N S L >----------------------------------------------------------------
Module entry point from another module
]]
local function _transl (args)
local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local language_name; -- language name that matches language code; used for tool tip
local translit; -- transliterated text to display
local script; -- IANA script
local msg; -- for when called functions return an error message
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if is_set (args[3]) then -- [3] set when {{transl|code|standard|text}}
args.text = args[3]; -- get the transliterated text
args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing
if not title_table[args.translit_std] then
return make_error_msg (table.concat ({'unrecognized transliteration standard: ', args.translit_std}), args, 'Transl');
end
else
if is_set (args[2]) then -- [2] set when {{transl|code|text}}
args.text = args[2]; -- get the transliterated text
else
if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text?
args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag
return make_error_msg ('no text', args, 'Transl'); -- args[1] is a code so we're missing text
else
args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message
return make_error_msg ('missing language / script code', args, 'Transl');
end
end
end
if is_set (args[1]) then -- IANA language code used for html lang= attribute; or ISO 15924 script code
if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form?
args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args[1]}), args, 'Transl'); -- invalid language / script code
end
else
return make_error_msg ('missing language / script code', args, 'Transl'); -- missing language / script code so quit
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, 'Transl');
end
if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default
args.italic = nil; -- set to nil;
end
if override_table[args.code] then -- is code a language code defined in the override table?
language_name = override_table[args.code];
args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag
elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables?
language_name = lang_table[args.code];
elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables?
language_name = lang_dep_table[args.code];
elseif script_table[args.code] then -- if here, code is not a language code; is it a script code?
language_name = script_table[args.code];
script = args.code; -- code was an ISO 15924 script so use that instead
args.code = ''; -- unset because not a language code
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args.code}), args, 'Transl'); -- invalid language / script code
end
-- here only when all parameters passed to make_translit() are valid
return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic);
end
--[[--------------------------< T R A N S L >------------------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function transl (frame)
return _transl (getArgs(frame));
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Returns category name associated with IETF language tag if valid; error message else
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _category_from_tag (args_t)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args_t[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args_t.link; -- make a boolean
local label = args_t.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local category_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
category_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', '');
if link then
return table.concat ({'[[:', category_name, ']]'});
else
return category_name;
end
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function category_from_tag (frame) -- entry point from an {{#invoke:Lang|category_from_tag|<ietf tag>|template=<template name>}}
return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
category_from_tag = category_from_tag,
lang = lang, -- entry point for {{lang}}
lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}}
lang_xx_italic = lang_xx_italic,
is_ietf_tag = is_ietf_tag,
is_ietf_tag_frame = is_ietf_tag_frame,
is_lang_name = is_lang_name,
tag_from_name = tag_from_name, -- returns ietf tag associated with language name
name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates
transl = transl, -- entry point for {{transl}}
_category_from_tag = _category_from_tag, -- entry points when this module is require()d into other modules
_lang = _lang,
_lang_xx_inherit = _lang_xx_inherit,
_lang_xx_italic = _lang_xx_italic,
_is_ietf_tag = _is_ietf_tag,
get_ietf_parts = get_ietf_parts,
_tag_from_name = _tag_from_name,
_name_from_tag = _name_from_tag,
_transl = _transl,
_translation_make = translation_make,
};
9d4ce44c7c49db6155692a2f959ea14ce5f8df40
Module:Unicode data
828
238
701
700
2023-06-06T18:16:26Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Unicode_data]]: w
Scribunto
text/plain
local p = {}
local floor = math.floor
local function errorf(level, ...)
if type(level) == "number" then
return error(string.format(...), level + 1)
else -- level is actually the format string.
return error(string.format(level, ...), 2)
end
end
local function binary_range_search(codepoint, ranges)
local low, mid, high
low, high = 1, ranges.length or require "Module:TableTools".length(ranges)
while low <= high do
mid = floor((low + high) / 2)
local range = ranges[mid]
if codepoint < range[1] then
high = mid - 1
elseif codepoint <= range[2] then
return range, mid
else
low = mid + 1
end
end
return nil, mid
end
p.binary_range_search = binary_range_search
--[[
local function linear_range_search(codepoint, ranges)
for i, range in ipairs(ranges) do
if range[1] <= codepoint and codepoint <= range[2] then
return range
end
end
end
--]]
-- Load a module by indexing "loader" with the name of the module minus the
-- "Module:Unicode data/" part. For instance, loader.blocks returns
-- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be
-- returned.
local loader = setmetatable({}, {
__index = function (self, key)
local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key)
if not success then
data = false
end
self[key] = data
return data
end
})
-- For the algorithm used to generate Hangul Syllable names,
-- see "Hangul Syllable Name Generation" in section 3.12 of the
-- Unicode Specification:
-- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf
local name_hooks = {
{ 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters
{ 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters
{ 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A
{ 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph
{ 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables
local Hangul_data = loader.Hangul
local syllable_index = codepoint - 0xAC00
return ("HANGUL SYLLABLE %s%s%s"):format(
Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)],
Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count)
/ Hangul_data.trail_count)],
Hangul_data.trails[syllable_index % Hangul_data.trail_count]
)
end },
-- High Surrogates, High Private Use Surrogates, Low Surrogates
{ 0xD800, 0xDFFF, "<surrogate-%04X>" },
{ 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use
-- CJK Compatibility Ideographs
{ 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0x17000, 0x187F7, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph
{ 0x18800, 0x18AFF, function (codepoint)
return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF)
end },
{ 0x18D00, 0x18D08, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement
{ 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu
{ 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B
{ 0x2A700, 0x2B739, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C
{ 0x2B740, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension D
{ 0x2B820, 0x2CEA1, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E
{ 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F
-- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane)
{ 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement
return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17)
end},
{ 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G
{ 0x31350, 0x323AF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H
{ 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use
{ 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use
}
name_hooks.length = #name_hooks
local name_range_cache
local function generate_name(data, codepoint)
if type(data) == "string" then
return data:format(codepoint)
else
return data(codepoint)
end
end
--[[
-- Checks that the code point is a number and in range.
-- Does not check whether code point is an integer.
-- Not used
local function check_codepoint(funcName, argIdx, val)
require 'libraryUtil'.checkType(funcName, argIdx, val, 'number')
if codepoint < 0 or 0x10FFFF < codepoint then
errorf("Codepoint %04X out of range", codepoint)
end
end
--]]
-- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8
function p.lookup_name(codepoint)
-- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned
-- (Cn) and specifically noncharacters:
-- https://www.unicode.org/faq/private_use.html#nonchar4
if 0xFDD0 <= codepoint and (codepoint <= 0xFDEF
or floor(codepoint % 0x10000) >= 0xFFFE) then
return ("<noncharacter-%04X>"):format(codepoint)
end
if name_range_cache -- Check if previously used "name hook" applies to this code point.
and codepoint >= name_range_cache[1]
and codepoint <= name_range_cache[2] then
return generate_name(name_range_cache[3], codepoint)
end
local range = binary_range_search(codepoint, name_hooks)
if range then
name_range_cache = range
return generate_name(range[3], codepoint)
end
local data = loader[('names/%03X'):format(codepoint / 0x1000)]
if data and data[codepoint] then
return data[codepoint]
-- Unassigned (Cn) consists of noncharacters and reserved characters.
-- The character has been established not to be a noncharacter,
-- and if it were assigned, its name would already been retrieved,
-- so it must be reserved.
else
return ("<reserved-%04X>"):format(codepoint)
end
end
--[[
-- No image data modules on Wikipedia yet.
function p.lookup_image(codepoint)
local data = loader[('images/%03X'):format(codepoint / 0x1000)]
if data then
return data[codepoint]
end
end
--]]
local planes = {
[ 0] = "Basic Multilingual Plane";
[ 1] = "Supplementary Multilingual Plane";
[ 2] = "Supplementary Ideographic Plane";
[ 3] = "Tertiary Ideographic Plane";
[14] = "Supplementary Special-purpose Plane";
[15] = "Supplementary Private Use Area-A";
[16] = "Supplementary Private Use Area-B";
}
-- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable.
local blocks
local function block_iter(blocks, i)
i = i + 1
local data = blocks[i]
if data then
-- Unpack doesn't work on tables loaded with mw.loadData.
return i, data[1], data[2], data[3]
end
end
-- An ipairs-type iterator generator for the list of blocks.
function p.enum_blocks()
local blocks = loader.blocks
return block_iter, blocks, 0
end
function p.lookup_plane(codepoint)
local i = floor(codepoint / 0x10000)
return planes[i] or ("Plane %u"):format(i)
end
function p.lookup_block(codepoint)
local blocks = loader.blocks
local range = binary_range_search(codepoint, blocks)
if range then
return range[3]
else
return "No Block"
end
end
function p.get_block_info(name)
for i, block in ipairs(loader.blocks) do
if block[3] == name then
return block
end
end
end
function p.is_valid_pagename(pagename)
local has_nonws = false
for cp in mw.ustring.gcodepoint(pagename) do
if (cp == 0x0023) -- #
or (cp == 0x005B) -- [
or (cp == 0x005D) -- ]
or (cp == 0x007B) -- {
or (cp == 0x007C) -- |
or (cp == 0x007D) -- }
or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR
or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block
or (cp == 0xFFFD) -- REPLACEMENT CHARACTER
then
return false
end
local printable, result = p.is_printable(cp)
if not printable then
return false
end
if result ~= "space-separator" then
has_nonws = true
end
end
return has_nonws
end
local function manual_unpack(what, from)
if what[from + 1] == nil then
return what[from]
end
local result = {}
from = from or 1
for i, item in ipairs(what) do
if i >= from then
table.insert(result, item)
end
end
return unpack(result)
end
local function compare_ranges(range1, range2)
return range1[1] < range2[1]
end
-- Creates a function to look up data in a module that contains "singles" (a
-- code point-to-data map) and "ranges" (an array containing arrays that contain
-- the low and high code points of a range and the data associated with that
-- range).
-- "loader" loads and returns the "singles" and "ranges" tables.
-- "match_func" is passed the code point and either the data or the "dots", and
-- generates the final result of the function.
-- The varargs ("dots") describes the default data to be returned if there wasn't
-- a match.
-- In case the function is used more than once, "cache" saves ranges that have
-- already been found to match, or a range whose data is the default if there
-- was no match.
local function memo_lookup(data_module_subpage, match_func, ...)
local dots = { ... }
local cache = {}
local singles, ranges
return function (codepoint)
if not singles then
local data_module = loader[data_module_subpage]
singles, ranges = data_module.singles, data_module.ranges
end
if singles[codepoint] then
return match_func(codepoint, singles[codepoint])
end
local range = binary_range_search(codepoint, cache)
if range then
return match_func(codepoint, manual_unpack(range, 3))
end
local range, index = binary_range_search(codepoint, ranges)
if range then
table.insert(cache, range)
table.sort(cache, compare_ranges)
return match_func(codepoint, manual_unpack(range, 3))
end
if ranges[index] then
local dots_range
if codepoint > ranges[index][2] then
dots_range = {
ranges[index][2] + 1,
ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF,
unpack(dots)
}
else -- codepoint < range[index][1]
dots_range = {
ranges[index - 1] and ranges[index - 1][2] + 1 or 0,
ranges[index][1] - 1,
unpack(dots)
}
end
table.sort(cache, compare_ranges)
end
return match_func(codepoint)
end
end
-- Get a code point's combining class value in [[Module:Unicode data/combining]],
-- and return whether this value is not zero. Zero is assigned as the default
-- if the combining class value is not found in this data module.
-- That is, return true if character is combining, or false if it is not.
-- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for
-- more information.
p.is_combining = memo_lookup(
"combining",
function (codepoint, combining_class)
return combining_class and combining_class ~= 0 or false
end,
0)
function p.add_dotted_circle(str)
return (mw.ustring.gsub(str, ".",
function(char)
if p.is_combining(mw.ustring.codepoint(char)) then
return '◌' .. char
end
end))
end
local lookup_control = memo_lookup(
"control",
function (codepoint, ccc)
return ccc or "assigned"
end,
"assigned")
p.lookup_control = lookup_control
function p.is_assigned(codepoint)
return lookup_control(codepoint) ~= "unassigned"
end
function p.is_printable(codepoint)
local result = lookup_control(codepoint)
return (result == "assigned") or (result == "space-separator"), result
end
function p.is_whitespace(codepoint)
local result = lookup_control(codepoint)
return (result == "space-separator"), result
end
p.lookup_category = memo_lookup(
"category",
function (codepoint, category)
return category
end,
"Cn")
local lookup_script = memo_lookup(
"scripts",
function (codepoint, script_code)
return script_code or 'Zzzz'
end,
"Zzzz")
p.lookup_script = lookup_script
function p.get_best_script(str)
-- Check type of argument, because mw.text.decode coerces numbers to strings!
require "libraryUtil".checkType("get_best_script", 1, str, "string")
-- Convert HTML character references (including named character references,
-- or character entities) to characters.
str = mw.text.decode(str, true)
local scripts = {}
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
-- Ignore "Inherited", "Undetermined", or "Uncoded" scripts.
if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then
scripts[script] = true
end
end
-- If scripts does not contain two or more keys,
-- return first and only key (script code) in table.
if not next(scripts, next(scripts)) then
return next(scripts)
end -- else return majority script, or else "Zzzz"?
end
function p.is_Latin(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0340-U+10FFFF. If they are not found and there is at least
-- one Latin-script character, the string counts as Latin, because the rest
-- of the characters can only be Zyyy, Zinh, and Zzzz.
-- The only scripts found below U+0370 (the first code point of the Greek
-- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz.
-- See the codepage in the [[UTF-8]] article.
if not str:find "[\205-\244]" then
for codepoint in mw.ustring.gcodepoint(str) do
if lookup_script(codepoint) == "Latn" then
return true
end
end
end
local Latn = false
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if script == "Latn" then
Latn = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return Latn
end
-- Checks that a string contains only characters belonging to right-to-left
-- scripts, or characters of ignorable scripts.
function p.is_rtl(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0580-U+10FFFF. If they are not found, the string can only
-- have characters from a left-to-right script, because the first code point
-- in a right-to-left script is U+0591, in the Hebrew block.
if not str:find "[\214-\244]" then
return false
end
local result = false
local rtl = loader.scripts.rtl
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if rtl[script] then
result = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return result
end
--[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------
external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so
that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text
has <br /> tags.
]]
function p.is_rtl_frame (frame)
local str = frame.args[1]; -- get the string from the {{#invoke:}} frame
str = str:gsub ('%b<>', ''); -- strip any html and html-like tags
return p.is_rtl (str); -- return if whatever remains rtl; false else
end
local function get_codepoint(args, arg)
local codepoint_string = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
local codepoint = tonumber(codepoint_string, 16)
or errorf(2, "Parameter %s is not a code point in hexadecimal base",
tostring(arg))
if not (0 <= codepoint and codepoint <= 0x10FFFF) then
errorf(2, "code point in parameter %s out of range", tostring(arg))
end
return codepoint
end
local function get_func(args, arg, prefix)
local suffix = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
suffix = mw.text.trim(suffix)
local func_name = prefix .. suffix
local func = p[func_name]
or errorf(2, "There is no function '%s'", func_name)
return func
end
-- This function allows any of the "lookup" functions to be invoked. The first
-- parameter is the word after "lookup_"; the second parameter is the code point
-- in hexadecimal base.
function p.lookup(frame)
local func = get_func(frame.args, 1, "lookup_")
local codepoint = get_codepoint(frame.args, 2)
local result = func(codepoint)
if func == p.lookup_name then
-- Prevent code point labels such as <control-0000> from being
-- interpreted as HTML tags.
result = result:gsub("<", "<")
end
return result
end
function p.is(frame)
local func = get_func(frame.args, 1, "is_")
-- is_Latin and is_valid_pagename take strings.
if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then
return (func(frame.args[2]))
else -- The rest take code points.
local codepoint = get_codepoint(frame.args, 2)
return (func(codepoint)) -- Adjust to one result.
end
end
return p
444a6cd03f4361fb8aa2439f5f5f5dc1f1a4dd59
Module:Lang/data
828
239
703
702
2023-06-06T18:16:28Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Lang/data]]: w
Scribunto
text/plain
local lang_obj = mw.language.getContentLanguage();
local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag
--[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------
primary table of tables that decode:
lang -> language tags and names
script -> ISO 15924 script tags
region -> ISO 3166 region tags
variant -> iana registered variant tags
suppressed -> map of scripts tags and their associated language tags
all of these data come from separate modules that are derived from the IANA language-subtag-registry file
key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes
have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches
the first name.
]]
local function key_to_lower (module, src_type)
local out = {};
local source = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data
if 'var_sup' == src_type then
for k, v in pairs (source) do
out[k:lower()] = v; -- for variant and suppressed everything is needed
end
elseif 'lang' == src_type and source.active then -- for ~/iana_languages (active)
for k, v in pairs (source.active) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
elseif 'lang_dep' == src_type and source.deprecated then -- for ~/iana_languages (deprecated)
for k, v in pairs (source.deprecated) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
else -- here for all other sources
for k, v in pairs (source) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
end
return out;
end
local lang_name_table_t = {
lang = key_to_lower ('Module:Language/data/iana languages', 'lang'),
lang_dep = key_to_lower ('Module:Language/data/iana languages', 'lang_dep'),
script = key_to_lower ('Module:Language/data/iana scripts'), -- script keys are capitalized; set to lower
region = key_to_lower ('Module:Language/data/iana regions'), -- region keys are uppercase; set to lower
variant = key_to_lower ('Module:Language/data/iana variants', 'var_sup'),
suppressed = key_to_lower ('Module:Language/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower
}
--[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >--------------------------------
For internationalization; not used at en.wiki
The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal.
Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names
in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki
language list for the local language.
Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all.
When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens
add an appropriate entry to the override table below.
Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the
MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply
spelling differences:
bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho
bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym
dv: IANA: Dhivehi MW: Divehi
el: IANA: Modern Greek MW: Greek
ht: IANA: Haitian MW: Haitian Creole
ky: IANA: Kirghiz MW: Kyrgyz
li: IANA: Limburgan MW: Limburgish
or: IANA: Oriya MW: Odia
os: IANA: Ossetian MW: Ossetic
"pa: IANA: Panjabi MW: Punjabi
"ps: IANA: Pushto MW: Pashto
"to: IANA: Tonga MW: Tongan
"ug: IANA: Uighur MW: Uyghur
use the override table to override language names that are incorrect for your project
To see the list of names that MediaWiki has for your language, enter this in the Debug colsole:
=mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all'))
(replacing <tag> with the language tag for your language)
Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true.
]]
local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki
-- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all
if true == media_wiki_override_enable then
local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki
for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list
if lang_name_table_t.lang[tag] then -- if the tag is in the main list
lang_name_table_t.lang[tag] = name; -- overwrite exisiting name with the name from MediaWiki
end
end
end
--[[--------------------------< O V E R R I D E >--------------------------------------------------------------
Language codes and names in this table override the BCP47 names in lang_name_table.
indexes in this table shall always be lower case
]]
local override = {
------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------
["ab"] = "Abkhaz", -- to match en.wiki article name
["ca-valencia"] = "Valencian",
["cu"] = "Church Slavonic", -- 2nd IANA name;
["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names
["de-ch"] = "Swiss Standard German",
["en-au"] = "Australian English",
["en-ca"] = "Canadian English",
["en-emodeng"] = "Early Modern English",
["en-gb"] = "British English",
["en-ie"] = "Irish English",
["en-in"] = "Indian English",
["en-nz"] = "New Zealand English",
["en-us"] = "American English",
["en-za"] = "South African English",
["fy"] = "West Frisian", -- Western Frisian
["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title
["nl-be"] = "Flemish", -- match MediaWiki
["oc-provenc"] = "Provençal",
["ps"] = "Pashto", -- Pushto
["pt-br"] = "Brazilian Portuguese", -- match MediaWiki
["tw-asante"] = "Asante Twi",
["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name
-- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["av"] = "Avar", -- Avaric
["bo"] = "Standard Tibetan", -- Tibetan
["el"] = "Greek", -- Modern Greek
-- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa
["ff"] = "Fula", -- Fulah
["ht"] = "Haitian Creole", -- Haitian
["hz"] = "Otjiherero", -- Herero
["ii"] = "Yi", -- Sichuan Yi
["ki"] = "Gikuyu", -- Kikuyu
["kl"] = "Greenlandic", -- Kalaallisut
["ky"] = "Kyrgyz", -- Kirghiz
["lg"] = "Luganda", -- Ganda
["li"] = "Limburgish", -- Limburgan
["mi"] = "Māori", -- Maori
["na"] = "Nauruan", -- Nauru
["nb"] = "Bokmål", -- Norwegian Bokmål
["nd"] = "Northern Ndebele", -- North Ndebele
["nn"] = "Nynorsk", -- Norwegian Nynorsk
["nr"] = "Southern Ndebele", -- South Ndebele
["ny"] = "Chichewa", -- Nyanja
["oj"] = "Ojibwe", -- Ojibwa
["or"] = "Odia", -- Oriya
["pa"] = "Punjabi", -- Panjabi
["rn"] = "Kirundi", -- Rundi
["sl"] = "Slovene", -- Slovenian
["ss"] = "Swazi", -- Swati
["st"] = "Sotho", -- Southern Sotho
["to"] = "Tongan", -- Tonga
--<end do-not-edit except to comment out>--
------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >----------------------------------------------
["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash)
["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name
["art"] = "constructed", -- to match en.wiki article; lowercase for category name
["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title
["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title
["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration;
["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat
["bxr"] = "Russian Buryat", -- Russia Buriat;
["bxu"] = "Chinese Buryat", -- China Buriat;
["byr"] = "Yipma", -- Baruya, Yipma
["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic
["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title
["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash)
["frr"] = "North Frisian", -- Northern Frisian
["frs"] = "East Frisian Low Saxon", -- Eastern Frisian
["gsw-fr"] = "Alsatian", -- match MediaWiki
["haa"] = "Hän", -- Han; to match en.wiki article title
["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash)
["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title
["jam"] = "Jamaican Patois", -- Jamaican Creole English
["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco
["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo
["mhr"] = "Meadow Mari", -- Eastern Mari
["mid"] = "Modern Mandaic", -- Mandaic
['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope;
["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash)
["mla"] = "Tamambo", -- Malo
['mte'] = "Mono-Alu", -- Mono (Solomon Islands)
['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope;
["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title
["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title
["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash)
["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title
["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text
["nrf-gg"] = "Guernésiais", -- match MediaWiki
["nrf-je"] = "Jèrriais", -- match MediaWiki
["nzi"] = "Nzema", -- Nzima; to match en.wiki article title
["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash)
["orv"] = "Old East Slavic", -- Old Russian
["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article
["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article
["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title
["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name()
["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article
["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title
["stq"] = "Saterland Frisian", -- Saterfriesisch
["und"] = "undetermined", -- capitalization to match existing category
["wrg"] = "Warrongo", -- Warungu
["xal-ru"] = "Kalmyk", -- to match en.wiki article title
["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño
["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title
["zxx"] = "no linguistic content", -- capitalization
-- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["ace"] = "Acehnese", -- Achinese
["aec"] = "Sa'idi Arabic", -- Saidi Arabic
["akl"] = "Aklan", -- Aklanon
["alt"] = "Altay", -- Southern Altai
["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache
["bal"] = "Balochi", -- Baluchi
-- ["bcl"] = "Central Bicolano", -- Central Bikol
["bin"] = "Edo", -- Bini
["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya
["chg"] = "Chagatay", -- Chagatai
["ckb"] = "Sorani Kurdish", -- Central Kurdish
["cnu"] = "Shenwa", -- Chenoua
["coc"] = "Cocopah", -- Cocopa
["diq"] = "Zazaki", -- Dimli
["fit"] = "Meänkieli", -- Tornedalen Finnish
["fkv"] = "Kven", -- Kven Finnish
["frk"] = "Old Frankish", -- Frankish
["gez"] = "Ge'ez", -- Geez
["gju"] = "Gujari", -- Gujari
["gsw"] = "Alemannic German", -- Swiss German
["gul"] = "Gullah", -- Sea Island Creole English
["hak"] = "Hakka", -- Hakka Chinese
["hbo"] = "Biblical Hebrew", -- Ancient Hebrew
["hnd"] = "Hindko", -- Southern Hindko
-- ["ikt"] = "Inuvialuk", -- Inuinnaqtun
["kaa"] = "Karakalpak", -- Kara-Kalpak
["khb"] = "Tai Lü", -- Lü
["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish
["kpo"] = "Kposo", -- Ikposo
["krj"] = "Kinaray-a", -- Kinaray-A
["ktz"] = "Juǀ'hoan", -- Juǀʼhoan
["lez"] = "Lezgian", -- Lezghian
["liv"] = "Livonian", -- Liv
["lng"] = "Lombardic", -- Langobardic
["mia"] = "Miami-Illinois", -- Miami
["miq"] = "Miskito", -- Mískito
["mix"] = "Mixtec", -- Mixtepec Mixtec
["mni"] = "Meitei", -- Manipuri
["mrj"] = "Hill Mari", -- Western Mari
["mww"] = "White Hmong", -- Hmong Daw
["nds-nl"] = "Dutch Low Saxon", -- Low German
-- ["new"] = "Nepal Bhasa", -- Newari
["nso"] = "Northern Sotho", -- Pedi
-- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari
["ood"] = "O'odham", -- Tohono O'odham
["otk"] = "Old Turkic", -- Old Turkish
["pal"] = "Middle Persian", -- Pahlavi
["pam"] = "Kapampangan", -- Pampanga
["phr"] = "Potwari", -- Pahari-Potwari
["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit
-- ["pnb"] = "Punjabi", -- Western Panjabi
["psu"] = "Shauraseni", -- Sauraseni Prākrit
["rap"] = "Rapa Nui", -- Rapanui
["rar"] = "Cook Islands Māori", -- Rarotongan
["rmu"] = "Scandoromani", -- Tavringer Romani
["rom"] = "Romani", -- Romany
["rup"] = "Aromanian", -- Macedo-Romanian
["ryu"] = "Okinawan", -- Central Okinawan
["sdc"] = "Sassarese", -- Sassarese Sardinian
["sdn"] = "Gallurese", -- Gallurese Sardinian
["shp"] = "Shipibo", -- Shipibo-Conibo
["src"] = "Logudorese", -- Logudorese Sardinian
["sro"] = "Campidanese", -- Campidanese Sardinian
["tkl"] = "Tokelauan", -- Tokelau
["tvl"] = "Tuvaluan", -- Tuvalu
["tyv"] = "Tuvan", -- Tuvinian
["vls"] = "West Flemish", -- Vlaams
["wep"] = "Westphalian", -- Westphalien
["xal"] = "Oirat", -- Kalmyk
["xcl"] = "Old Armenian", -- Classical Armenian
["yua"] = "Yucatec Maya", -- Yucateco
--<end do-not-edit except to comment out>--
------------------------------< P R I V A T E _ U S E _ T A G S >----------------------------------------------
["akk-x-latbabyl"] = "Late Babylonian",
["akk-x-midassyr"] = "Middle Assyrian Akkadian",
["akk-x-midbabyl"] = "Middle Babylonian Akkadian",
["akk-x-neoassyr"] = "Neo-Assyrian Akkadian",
["akk-x-neobabyl"] = "Neo-Babylonian Akkadian",
["akk-x-old"] = "Old Akkadian",
["akk-x-oldassyr"] = "Old Assyrian Akkadian",
["akk-x-oldbabyl"] = "Old Babylonian Akkadian",
["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages
["ca-x-old"] = "Old Catalan",
["cel-x-proto"] = "Proto-Celtic", -- cel in IANA is Celtic languages
["egy-x-demotic"] = "Demotic Egyptian",
["egy-x-late"] = "Late Egyptian",
["egy-x-middle"] = "Middle Egyptian",
["egy-x-old"] = "Old Egyptian",
["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages
["gmw-x-ecg"] = "East Central German",
["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre
["grc-x-attic"] = "Attic Greek",
["grc-x-biblical"] = "Biblical Greek",
["grc-x-byzant"] = "Byzantine Greek",
["grc-x-classic"] = "Classical Greek",
["grc-x-doric"] = "Doric Greek",
["grc-x-hellen"] = "Hellenistic Greek",
["grc-x-ionic"] = "Ionic Greek",
["grc-x-koine"] = "Koinē Greek",
["grc-x-medieval"] = "Medieval Greek",
["grc-x-patris"] = "Patristic Greek",
["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages
["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages
["ine-x-proto"] = "Proto-Indo-European",
["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages
["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages
["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there
["la-x-medieval"] = "Medieval Latin",
["la-x-new"] = "New Latin",
["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect
["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages
["prg-x-old"] = "Old Prussian",
["sem-x-ammonite"] = "Ammonite",
["sem-x-aramaic"] = "Aramaic",
["sem-x-canaan"] = "Canaanite languages",
["sem-x-dumaitic"] = "Dumaitic",
["sem-x-egurage"] = "Eastern Gurage",
["sem-x-hatran"] = "Hatran Aramaic",
["sem-x-oldsoara"] = "Old South Arabian",
["sem-x-palmyren"] = "Palmyrene Aramaic",
["sem-x-proto"] = "Proto-Semitic",
["sem-x-taymanit"] = "Taymanitic",
["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages
["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai
["yuf-x-wal"] = "Walapai",
["yuf-x-yav"] = "Yavapai",
}
--[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------
for those rare occasions when article titles don't fit with the normal '<language name>-language', this table
maps language code to article title. Use of this table should be avoided and the use of redirects preferred as
that is the long-standing method of handling article names that don't fit with the normal pattern
]]
local article_name = {
['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page
["lij"] = "Ligurian (Romance language)", -- Ligurian; see Template_talk:Lang#Ligurian_dab
['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon)
['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages
['mnr'] = "Mono language (California)", -- Mono (USA)
['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon)
['qwm'] = "Kuman (Russia)", -- Kuman (Russia); to avoid Kuman dab page
["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon)
["xlg"] = "Ligurian (ancient language)", -- see Template_talk:Lang#Ligurian_dab
["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo)
}
--[=[-------------------------< R T L _ S C R I P T S >--------------------------------------------------------
ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]]
last update to this list: 2017-12-24
]=]
local rtl_scripts = {
'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr',
'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb',
'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg',
'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole',
};
--[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------
This is a table of tables of transliteration standards and the language codes or language scripts that apply to
those standards. This table is used to create the tool-tip text associated with the transliterated text displayed
by some of the {{lang-??}} templates.
These tables are more-or-less copied directly from {{transl}}. The standard 'NO_STD' is a construct to allow for
the cases when no |std= parameter value is provided.
]]
local translit_title_table = {
['ahl'] = {
['default'] = 'Academy of the Hebrew Language transliteration',
},
['ala'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['ala-lc'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['batr'] = {
['default'] = 'Bikdash Arabic Transliteration Rules',
},
['bgn/pcgn'] = {
['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration',
},
['din'] = {
['ar'] = 'DIN 31635 Arabic',
['fa'] = 'DIN 31635 Arabic',
['ku'] = 'DIN 31635 Arabic',
['ps'] = 'DIN 31635 Arabic',
['tg'] = 'DIN 31635 Arabic',
['ug'] = 'DIN 31635 Arabic',
['ur'] = 'DIN 31635 Arabic',
['arab'] = 'DIN 31635 Arabic',
['default'] = 'DIN transliteration',
},
['eae'] = {
['default'] = 'Encyclopaedia Aethiopica transliteration',
},
['hepburn'] = {
['default'] = 'Hepburn transliteration',
},
['hunterian'] = {
['default'] = 'Hunterian transliteration',
},
['iast'] = {
['default'] = 'International Alphabet of Sanskrit transliteration',
},
['iso'] = { -- when a transliteration standard is supplied
['ab'] = 'ISO 9 Cyrillic',
['ba'] = 'ISO 9 Cyrillic',
['be'] = 'ISO 9 Cyrillic',
['bg'] = 'ISO 9 Cyrillic',
['kk'] = 'ISO 9 Cyrillic',
['ky'] = 'ISO 9 Cyrillic',
['mn'] = 'ISO 9 Cyrillic',
['ru'] = 'ISO 9 Cyrillic',
['tg'] = 'ISO 9 Cyrillic',
['uk'] = 'ISO 9 Cyrillic',
['bua'] = 'ISO 9 Cyrillic',
['sah'] = 'ISO 9 Cyrillic',
['tut'] = 'ISO 9 Cyrillic',
['xal'] = 'ISO 9 Cyrillic',
['cyrl'] = 'ISO 9 Cyrillic',
['ar'] = 'ISO 233 Arabic',
['ku'] = 'ISO 233 Arabic',
['ps'] = 'ISO 233 Arabic',
['ug'] = 'ISO 233 Arabic',
['ur'] = 'ISO 233 Arabic',
['arab'] = 'ISO 233 Arabic',
['he'] = 'ISO 259 Hebrew',
['yi'] = 'ISO 259 Hebrew',
['hebr'] = 'ISO 259 Hebrew',
['el'] = 'ISO 843 Greek',
['grc'] = 'ISO 843 Greek',
['ja'] = 'ISO 3602 Japanese',
['hira'] = 'ISO 3602 Japanese',
['hrkt'] = 'ISO 3602 Japanese',
['jpan'] = 'ISO 3602 Japanese',
['kana'] = 'ISO 3602 Japanese',
['zh'] = 'ISO 7098 Chinese',
['chi'] = 'ISO 7098 Chinese',
['pny'] = 'ISO 7098 Chinese',
['zho'] = 'ISO 7098 Chinese',
-- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani?
['hans'] = 'ISO 7098 Chinese',
['hant'] = 'ISO 7098 Chinese',
['ka'] = 'ISO 9984 Georgian',
['kat'] = 'ISO 9984 Georgian',
['arm'] = 'ISO 9985 Armenian',
['hy'] = 'ISO 9985 Armenian',
['th'] = 'ISO 11940 Thai',
['tha'] = 'ISO 11940 Thai',
['ko'] = 'ISO 11941 Korean',
['kor'] = 'ISO 11941 Korean',
['awa'] = 'ISO 15919 Indic',
['bho'] = 'ISO 15919 Indic',
['bn'] = 'ISO 15919 Indic',
['bra'] = 'ISO 15919 Indic',
['doi'] = 'ISO 15919 Indic',
['dra'] = 'ISO 15919 Indic',
['gon'] = 'ISO 15919 Indic',
['gu'] = 'ISO 15919 Indic',
['hi'] = 'ISO 15919 Indic',
['hno'] = 'ISO 15919 Indic',
['inc'] = 'ISO 15919 Indic',
['kn'] = 'ISO 15919 Indic',
['kok'] = 'ISO 15919 Indic',
['ks'] = 'ISO 15919 Indic',
['mag'] = 'ISO 15919 Indic',
['mai'] = 'ISO 15919 Indic',
['ml'] = 'ISO 15919 Indic',
['mr'] = 'ISO 15919 Indic',
['ne'] = 'ISO 15919 Indic',
['new'] = 'ISO 15919 Indic',
['or'] = 'ISO 15919 Indic',
['pa'] = 'ISO 15919 Indic',
['pnb'] = 'ISO 15919 Indic',
['raj'] = 'ISO 15919 Indic',
['sa'] = 'ISO 15919 Indic',
['sat'] = 'ISO 15919 Indic',
['sd'] = 'ISO 15919 Indic',
['si'] = 'ISO 15919 Indic',
['skr'] = 'ISO 15919 Indic',
['ta'] = 'ISO 15919 Indic',
['tcy'] = 'ISO 15919 Indic',
['te'] = 'ISO 15919 Indic',
['beng'] = 'ISO 15919 Indic',
['brah'] = 'ISO 15919 Indic',
['deva'] = 'ISO 15919 Indic',
['gujr'] = 'ISO 15919 Indic',
['guru'] = 'ISO 15919 Indic',
['knda'] = 'ISO 15919 Indic',
['mlym'] = 'ISO 15919 Indic',
['orya'] = 'ISO 15919 Indic',
['sinh'] = 'ISO 15919 Indic',
['taml'] = 'ISO 15919 Indic',
['telu'] = 'ISO 15919 Indic',
['default'] = 'ISO transliteration',
},
['jyutping'] = {
['default'] = 'Jyutping transliteration',
},
['mlcts'] = {
['default'] = 'Myanmar Language Commission Transcription System',
},
['mr'] = {
['default'] = 'McCune–Reischauer transliteration',
},
['nihon-shiki'] = {
['default'] = 'Nihon-shiki transliteration',
},
['no_std'] = { -- when no transliteration standard is supplied
['akk'] = 'Semitic transliteration',
['sem'] = 'Semitic transliteration',
['phnx'] = 'Semitic transliteration',
['xsux'] = 'Cuneiform transliteration',
},
['pinyin'] = {
['default'] = 'Pinyin transliteration',
},
['rr'] = {
['default'] = 'Revised Romanization of Korean transliteration',
},
['rtgs'] = {
['default'] = 'Royal Thai General System of Transcription',
},
['satts'] = {
['default'] = 'Standard Arabic Technical Transliteration System transliteration',
},
['scientific'] = {
['default'] = 'scientific transliteration',
},
['ukrainian'] = {
['default'] = 'Ukrainian National system of romanization',
},
['ungegn'] = {
['default'] = 'United Nations Group of Experts on Geographical Names transliteration',
},
['wadegile'] = {
['default'] = 'Wade–Giles transliteration',
},
['wehr'] = {
['default'] = 'Hans Wehr transliteration',
},
};
return
{
this_wiki_lang_tag = this_wiki_lang_tag,
this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction
article_name = article_name,
lang_name_table = lang_name_table_t,
override = override,
rtl_scripts = rtl_scripts,
special_tags_table = special_tags_table,
translit_title_table = translit_title_table,
};
44981b3b66900e816590946e3e049c421ebecc80
Module:Language/data/iana languages
828
240
705
704
2023-06-06T18:16:28Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Language/data/iana_languages]]: w
Scribunto
text/plain
-- File-Date: 2023-05-11
local active = {
["aa"] = {"Afar"},
["ab"] = {"Abkhazian"},
["ae"] = {"Avestan"},
["af"] = {"Afrikaans"},
["ak"] = {"Akan"},
["am"] = {"Amharic"},
["an"] = {"Aragonese"},
["ar"] = {"Arabic"},
["as"] = {"Assamese"},
["av"] = {"Avaric"},
["ay"] = {"Aymara"},
["az"] = {"Azerbaijani"},
["ba"] = {"Bashkir"},
["be"] = {"Belarusian"},
["bg"] = {"Bulgarian"},
["bh"] = {"Bihari languages"},
["bi"] = {"Bislama"},
["bm"] = {"Bambara"},
["bn"] = {"Bengali", "Bangla"},
["bo"] = {"Tibetan"},
["br"] = {"Breton"},
["bs"] = {"Bosnian"},
["ca"] = {"Catalan", "Valencian"},
["ce"] = {"Chechen"},
["ch"] = {"Chamorro"},
["co"] = {"Corsican"},
["cr"] = {"Cree"},
["cs"] = {"Czech"},
["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"},
["cv"] = {"Chuvash"},
["cy"] = {"Welsh"},
["da"] = {"Danish"},
["de"] = {"German"},
["dv"] = {"Dhivehi", "Divehi", "Maldivian"},
["dz"] = {"Dzongkha"},
["ee"] = {"Ewe"},
["el"] = {"Modern Greek (1453-)"},
["en"] = {"English"},
["eo"] = {"Esperanto"},
["es"] = {"Spanish", "Castilian"},
["et"] = {"Estonian"},
["eu"] = {"Basque"},
["fa"] = {"Persian"},
["ff"] = {"Fulah"},
["fi"] = {"Finnish"},
["fj"] = {"Fijian"},
["fo"] = {"Faroese"},
["fr"] = {"French"},
["fy"] = {"Western Frisian"},
["ga"] = {"Irish"},
["gd"] = {"Scottish Gaelic", "Gaelic"},
["gl"] = {"Galician"},
["gn"] = {"Guarani"},
["gu"] = {"Gujarati"},
["gv"] = {"Manx"},
["ha"] = {"Hausa"},
["he"] = {"Hebrew"},
["hi"] = {"Hindi"},
["ho"] = {"Hiri Motu"},
["hr"] = {"Croatian"},
["ht"] = {"Haitian", "Haitian Creole"},
["hu"] = {"Hungarian"},
["hy"] = {"Armenian"},
["hz"] = {"Herero"},
["ia"] = {"Interlingua (International Auxiliary Language Association)"},
["id"] = {"Indonesian"},
["ie"] = {"Interlingue", "Occidental"},
["ig"] = {"Igbo"},
["ii"] = {"Sichuan Yi", "Nuosu"},
["ik"] = {"Inupiaq"},
["io"] = {"Ido"},
["is"] = {"Icelandic"},
["it"] = {"Italian"},
["iu"] = {"Inuktitut"},
["ja"] = {"Japanese"},
["jv"] = {"Javanese"},
["ka"] = {"Georgian"},
["kg"] = {"Kongo"},
["ki"] = {"Kikuyu", "Gikuyu"},
["kj"] = {"Kuanyama", "Kwanyama"},
["kk"] = {"Kazakh"},
["kl"] = {"Kalaallisut", "Greenlandic"},
["km"] = {"Khmer", "Central Khmer"},
["kn"] = {"Kannada"},
["ko"] = {"Korean"},
["kr"] = {"Kanuri"},
["ks"] = {"Kashmiri"},
["ku"] = {"Kurdish"},
["kv"] = {"Komi"},
["kw"] = {"Cornish"},
["ky"] = {"Kirghiz", "Kyrgyz"},
["la"] = {"Latin"},
["lb"] = {"Luxembourgish", "Letzeburgesch"},
["lg"] = {"Ganda", "Luganda"},
["li"] = {"Limburgan", "Limburger", "Limburgish"},
["ln"] = {"Lingala"},
["lo"] = {"Lao"},
["lt"] = {"Lithuanian"},
["lu"] = {"Luba-Katanga"},
["lv"] = {"Latvian"},
["mg"] = {"Malagasy"},
["mh"] = {"Marshallese"},
["mi"] = {"Maori"},
["mk"] = {"Macedonian"},
["ml"] = {"Malayalam"},
["mn"] = {"Mongolian"},
["mr"] = {"Marathi"},
["ms"] = {"Malay (macrolanguage)"},
["mt"] = {"Maltese"},
["my"] = {"Burmese"},
["na"] = {"Nauru"},
["nb"] = {"Norwegian Bokmål"},
["nd"] = {"North Ndebele"},
["ne"] = {"Nepali (macrolanguage)"},
["ng"] = {"Ndonga"},
["nl"] = {"Dutch", "Flemish"},
["nn"] = {"Norwegian Nynorsk"},
["no"] = {"Norwegian"},
["nr"] = {"South Ndebele"},
["nv"] = {"Navajo", "Navaho"},
["ny"] = {"Nyanja", "Chewa", "Chichewa"},
["oc"] = {"Occitan (post 1500)"},
["oj"] = {"Ojibwa"},
["om"] = {"Oromo"},
["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"},
["os"] = {"Ossetian", "Ossetic"},
["pa"] = {"Panjabi", "Punjabi"},
["pi"] = {"Pali"},
["pl"] = {"Polish"},
["ps"] = {"Pushto", "Pashto"},
["pt"] = {"Portuguese"},
["qu"] = {"Quechua"},
["rm"] = {"Romansh"},
["rn"] = {"Rundi"},
["ro"] = {"Romanian", "Moldavian", "Moldovan"},
["ru"] = {"Russian"},
["rw"] = {"Kinyarwanda"},
["sa"] = {"Sanskrit"},
["sc"] = {"Sardinian"},
["sd"] = {"Sindhi"},
["se"] = {"Northern Sami"},
["sg"] = {"Sango"},
["sh"] = {"Serbo-Croatian"},
["si"] = {"Sinhala", "Sinhalese"},
["sk"] = {"Slovak"},
["sl"] = {"Slovenian"},
["sm"] = {"Samoan"},
["sn"] = {"Shona"},
["so"] = {"Somali"},
["sq"] = {"Albanian"},
["sr"] = {"Serbian"},
["ss"] = {"Swati"},
["st"] = {"Southern Sotho"},
["su"] = {"Sundanese"},
["sv"] = {"Swedish"},
["sw"] = {"Swahili (macrolanguage)"},
["ta"] = {"Tamil"},
["te"] = {"Telugu"},
["tg"] = {"Tajik"},
["th"] = {"Thai"},
["ti"] = {"Tigrinya"},
["tk"] = {"Turkmen"},
["tl"] = {"Tagalog"},
["tn"] = {"Tswana"},
["to"] = {"Tonga (Tonga Islands)"},
["tr"] = {"Turkish"},
["ts"] = {"Tsonga"},
["tt"] = {"Tatar"},
["tw"] = {"Twi"},
["ty"] = {"Tahitian"},
["ug"] = {"Uighur", "Uyghur"},
["uk"] = {"Ukrainian"},
["ur"] = {"Urdu"},
["uz"] = {"Uzbek"},
["ve"] = {"Venda"},
["vi"] = {"Vietnamese"},
["vo"] = {"Volapük"},
["wa"] = {"Walloon"},
["wo"] = {"Wolof"},
["xh"] = {"Xhosa"},
["yi"] = {"Yiddish"},
["yo"] = {"Yoruba"},
["za"] = {"Zhuang", "Chuang"},
["zh"] = {"Chinese"},
["zu"] = {"Zulu"},
["aaa"] = {"Ghotuo"},
["aab"] = {"Alumu-Tesu"},
["aac"] = {"Ari"},
["aad"] = {"Amal"},
["aae"] = {"Arbëreshë Albanian"},
["aaf"] = {"Aranadan"},
["aag"] = {"Ambrak"},
["aah"] = {"Abu' Arapesh"},
["aai"] = {"Arifama-Miniafia"},
["aak"] = {"Ankave"},
["aal"] = {"Afade"},
["aan"] = {"Anambé"},
["aao"] = {"Algerian Saharan Arabic"},
["aap"] = {"Pará Arára"},
["aaq"] = {"Eastern Abnaki"},
["aas"] = {"Aasáx"},
["aat"] = {"Arvanitika Albanian"},
["aau"] = {"Abau"},
["aav"] = {"Austro-Asiatic languages"},
["aaw"] = {"Solong"},
["aax"] = {"Mandobo Atas"},
["aaz"] = {"Amarasi"},
["aba"] = {"Abé"},
["abb"] = {"Bankon"},
["abc"] = {"Ambala Ayta"},
["abd"] = {"Manide"},
["abe"] = {"Western Abnaki"},
["abf"] = {"Abai Sungai"},
["abg"] = {"Abaga"},
["abh"] = {"Tajiki Arabic"},
["abi"] = {"Abidji"},
["abj"] = {"Aka-Bea"},
["abl"] = {"Lampung Nyo"},
["abm"] = {"Abanyom"},
["abn"] = {"Abua"},
["abo"] = {"Abon"},
["abp"] = {"Abellen Ayta"},
["abq"] = {"Abaza"},
["abr"] = {"Abron"},
["abs"] = {"Ambonese Malay"},
["abt"] = {"Ambulas"},
["abu"] = {"Abure"},
["abv"] = {"Baharna Arabic"},
["abw"] = {"Pal"},
["abx"] = {"Inabaknon"},
["aby"] = {"Aneme Wake"},
["abz"] = {"Abui"},
["aca"] = {"Achagua"},
["acb"] = {"Áncá"},
["acd"] = {"Gikyode"},
["ace"] = {"Achinese"},
["acf"] = {"Saint Lucian Creole French"},
["ach"] = {"Acoli"},
["aci"] = {"Aka-Cari"},
["ack"] = {"Aka-Kora"},
["acl"] = {"Akar-Bale"},
["acm"] = {"Mesopotamian Arabic"},
["acn"] = {"Achang"},
["acp"] = {"Eastern Acipa"},
["acq"] = {"Ta'izzi-Adeni Arabic"},
["acr"] = {"Achi"},
["acs"] = {"Acroá"},
["act"] = {"Achterhoeks"},
["acu"] = {"Achuar-Shiwiar"},
["acv"] = {"Achumawi"},
["acw"] = {"Hijazi Arabic"},
["acx"] = {"Omani Arabic"},
["acy"] = {"Cypriot Arabic"},
["acz"] = {"Acheron"},
["ada"] = {"Adangme"},
["adb"] = {"Atauran"},
["add"] = {"Lidzonka", "Dzodinka"},
["ade"] = {"Adele"},
["adf"] = {"Dhofari Arabic"},
["adg"] = {"Andegerebinha"},
["adh"] = {"Adhola"},
["adi"] = {"Adi"},
["adj"] = {"Adioukrou"},
["adl"] = {"Galo"},
["adn"] = {"Adang"},
["ado"] = {"Abu"},
["adq"] = {"Adangbe"},
["adr"] = {"Adonara"},
["ads"] = {"Adamorobe Sign Language"},
["adt"] = {"Adnyamathanha"},
["adu"] = {"Aduge"},
["adw"] = {"Amundava"},
["adx"] = {"Amdo Tibetan"},
["ady"] = {"Adyghe", "Adygei"},
["adz"] = {"Adzera"},
["aea"] = {"Areba"},
["aeb"] = {"Tunisian Arabic"},
["aec"] = {"Saidi Arabic"},
["aed"] = {"Argentine Sign Language"},
["aee"] = {"Northeast Pashai", "Northeast Pashayi"},
["aek"] = {"Haeke"},
["ael"] = {"Ambele"},
["aem"] = {"Arem"},
["aen"] = {"Armenian Sign Language"},
["aeq"] = {"Aer"},
["aer"] = {"Eastern Arrernte"},
["aes"] = {"Alsea"},
["aeu"] = {"Akeu"},
["aew"] = {"Ambakich"},
["aey"] = {"Amele"},
["aez"] = {"Aeka"},
["afa"] = {"Afro-Asiatic languages"},
["afb"] = {"Gulf Arabic"},
["afd"] = {"Andai"},
["afe"] = {"Putukwam"},
["afg"] = {"Afghan Sign Language"},
["afh"] = {"Afrihili"},
["afi"] = {"Akrukay", "Chini"},
["afk"] = {"Nanubae"},
["afn"] = {"Defaka"},
["afo"] = {"Eloyi"},
["afp"] = {"Tapei"},
["afs"] = {"Afro-Seminole Creole"},
["aft"] = {"Afitti"},
["afu"] = {"Awutu"},
["afz"] = {"Obokuitai"},
["aga"] = {"Aguano"},
["agb"] = {"Legbo"},
["agc"] = {"Agatu"},
["agd"] = {"Agarabi"},
["age"] = {"Angal"},
["agf"] = {"Arguni"},
["agg"] = {"Angor"},
["agh"] = {"Ngelima"},
["agi"] = {"Agariya"},
["agj"] = {"Argobba"},
["agk"] = {"Isarog Agta"},
["agl"] = {"Fembe"},
["agm"] = {"Angaataha"},
["agn"] = {"Agutaynen"},
["ago"] = {"Tainae"},
["agq"] = {"Aghem"},
["agr"] = {"Aguaruna"},
["ags"] = {"Esimbi"},
["agt"] = {"Central Cagayan Agta"},
["agu"] = {"Aguacateco"},
["agv"] = {"Remontado Dumagat"},
["agw"] = {"Kahua"},
["agx"] = {"Aghul"},
["agy"] = {"Southern Alta"},
["agz"] = {"Mt. Iriga Agta"},
["aha"] = {"Ahanta"},
["ahb"] = {"Axamb"},
["ahg"] = {"Qimant"},
["ahh"] = {"Aghu"},
["ahi"] = {"Tiagbamrin Aizi"},
["ahk"] = {"Akha"},
["ahl"] = {"Igo"},
["ahm"] = {"Mobumrin Aizi"},
["ahn"] = {"Àhàn"},
["aho"] = {"Ahom"},
["ahp"] = {"Aproumu Aizi"},
["ahr"] = {"Ahirani"},
["ahs"] = {"Ashe"},
["aht"] = {"Ahtena"},
["aia"] = {"Arosi"},
["aib"] = {"Ainu (China)"},
["aic"] = {"Ainbai"},
["aid"] = {"Alngith"},
["aie"] = {"Amara"},
["aif"] = {"Agi"},
["aig"] = {"Antigua and Barbuda Creole English"},
["aih"] = {"Ai-Cham"},
["aii"] = {"Assyrian Neo-Aramaic"},
["aij"] = {"Lishanid Noshan"},
["aik"] = {"Ake"},
["ail"] = {"Aimele"},
["aim"] = {"Aimol"},
["ain"] = {"Ainu (Japan)"},
["aio"] = {"Aiton"},
["aip"] = {"Burumakok"},
["aiq"] = {"Aimaq"},
["air"] = {"Airoran"},
["ait"] = {"Arikem"},
["aiw"] = {"Aari"},
["aix"] = {"Aighon"},
["aiy"] = {"Ali"},
["aja"] = {"Aja (South Sudan)"},
["ajg"] = {"Aja (Benin)"},
["aji"] = {"Ajië"},
["ajn"] = {"Andajin"},
["ajs"] = {"Algerian Jewish Sign Language"},
["aju"] = {"Judeo-Moroccan Arabic"},
["ajw"] = {"Ajawa"},
["ajz"] = {"Amri Karbi"},
["akb"] = {"Batak Angkola"},
["akc"] = {"Mpur"},
["akd"] = {"Ukpet-Ehom"},
["ake"] = {"Akawaio"},
["akf"] = {"Akpa"},
["akg"] = {"Anakalangu"},
["akh"] = {"Angal Heneng"},
["aki"] = {"Aiome"},
["akj"] = {"Aka-Jeru"},
["akk"] = {"Akkadian"},
["akl"] = {"Aklanon"},
["akm"] = {"Aka-Bo"},
["ako"] = {"Akurio"},
["akp"] = {"Siwu"},
["akq"] = {"Ak"},
["akr"] = {"Araki"},
["aks"] = {"Akaselem"},
["akt"] = {"Akolet"},
["aku"] = {"Akum"},
["akv"] = {"Akhvakh"},
["akw"] = {"Akwa"},
["akx"] = {"Aka-Kede"},
["aky"] = {"Aka-Kol"},
["akz"] = {"Alabama"},
["ala"] = {"Alago"},
["alc"] = {"Qawasqar"},
["ald"] = {"Alladian"},
["ale"] = {"Aleut"},
["alf"] = {"Alege"},
["alg"] = {"Algonquian languages"},
["alh"] = {"Alawa"},
["ali"] = {"Amaimon"},
["alj"] = {"Alangan"},
["alk"] = {"Alak"},
["all"] = {"Allar"},
["alm"] = {"Amblong"},
["aln"] = {"Gheg Albanian"},
["alo"] = {"Larike-Wakasihu"},
["alp"] = {"Alune"},
["alq"] = {"Algonquin"},
["alr"] = {"Alutor"},
["als"] = {"Tosk Albanian"},
["alt"] = {"Southern Altai"},
["alu"] = {"'Are'are"},
["alv"] = {"Atlantic-Congo languages"},
["alw"] = {"Alaba-K’abeena", "Wanbasana"},
["alx"] = {"Amol"},
["aly"] = {"Alyawarr"},
["alz"] = {"Alur"},
["ama"] = {"Amanayé"},
["amb"] = {"Ambo"},
["amc"] = {"Amahuaca"},
["ame"] = {"Yanesha'"},
["amf"] = {"Hamer-Banna"},
["amg"] = {"Amurdak"},
["ami"] = {"Amis"},
["amj"] = {"Amdang"},
["amk"] = {"Ambai"},
["aml"] = {"War-Jaintia"},
["amm"] = {"Ama (Papua New Guinea)"},
["amn"] = {"Amanab"},
["amo"] = {"Amo"},
["amp"] = {"Alamblak"},
["amq"] = {"Amahai"},
["amr"] = {"Amarakaeri"},
["ams"] = {"Southern Amami-Oshima"},
["amt"] = {"Amto"},
["amu"] = {"Guerrero Amuzgo"},
["amv"] = {"Ambelau"},
["amw"] = {"Western Neo-Aramaic"},
["amx"] = {"Anmatyerre"},
["amy"] = {"Ami"},
["amz"] = {"Atampaya"},
["ana"] = {"Andaqui"},
["anb"] = {"Andoa"},
["anc"] = {"Ngas"},
["and"] = {"Ansus"},
["ane"] = {"Xârâcùù"},
["anf"] = {"Animere"},
["ang"] = {"Old English (ca. 450-1100)"},
["anh"] = {"Nend"},
["ani"] = {"Andi"},
["anj"] = {"Anor"},
["ank"] = {"Goemai"},
["anl"] = {"Anu-Hkongso Chin"},
["anm"] = {"Anal"},
["ann"] = {"Obolo"},
["ano"] = {"Andoque"},
["anp"] = {"Angika"},
["anq"] = {"Jarawa (India)"},
["anr"] = {"Andh"},
["ans"] = {"Anserma"},
["ant"] = {"Antakarinya", "Antikarinya"},
["anu"] = {"Anuak"},
["anv"] = {"Denya"},
["anw"] = {"Anaang"},
["anx"] = {"Andra-Hus"},
["any"] = {"Anyin"},
["anz"] = {"Anem"},
["aoa"] = {"Angolar"},
["aob"] = {"Abom"},
["aoc"] = {"Pemon"},
["aod"] = {"Andarum"},
["aoe"] = {"Angal Enen"},
["aof"] = {"Bragat"},
["aog"] = {"Angoram"},
["aoi"] = {"Anindilyakwa"},
["aoj"] = {"Mufian"},
["aok"] = {"Arhö"},
["aol"] = {"Alor"},
["aom"] = {"Ömie"},
["aon"] = {"Bumbita Arapesh"},
["aor"] = {"Aore"},
["aos"] = {"Taikat"},
["aot"] = {"Atong (India)", "A'tong"},
["aou"] = {"A'ou"},
["aox"] = {"Atorada"},
["aoz"] = {"Uab Meto"},
["apa"] = {"Apache languages"},
["apb"] = {"Sa'a"},
["apc"] = {"Levantine Arabic"},
["apd"] = {"Sudanese Arabic"},
["ape"] = {"Bukiyip"},
["apf"] = {"Pahanan Agta"},
["apg"] = {"Ampanang"},
["aph"] = {"Athpariya"},
["api"] = {"Apiaká"},
["apj"] = {"Jicarilla Apache"},
["apk"] = {"Kiowa Apache"},
["apl"] = {"Lipan Apache"},
["apm"] = {"Mescalero-Chiricahua Apache"},
["apn"] = {"Apinayé"},
["apo"] = {"Ambul"},
["app"] = {"Apma"},
["apq"] = {"A-Pucikwar"},
["apr"] = {"Arop-Lokep"},
["aps"] = {"Arop-Sissano"},
["apt"] = {"Apatani"},
["apu"] = {"Apurinã"},
["apv"] = {"Alapmunte"},
["apw"] = {"Western Apache"},
["apx"] = {"Aputai"},
["apy"] = {"Apalaí"},
["apz"] = {"Safeyoka"},
["aqa"] = {"Alacalufan languages"},
["aqc"] = {"Archi"},
["aqd"] = {"Ampari Dogon"},
["aqg"] = {"Arigidi"},
["aqk"] = {"Aninka"},
["aql"] = {"Algic languages"},
["aqm"] = {"Atohwaim"},
["aqn"] = {"Northern Alta"},
["aqp"] = {"Atakapa"},
["aqr"] = {"Arhâ"},
["aqt"] = {"Angaité"},
["aqz"] = {"Akuntsu"},
["arb"] = {"Standard Arabic"},
["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"},
["ard"] = {"Arabana"},
["are"] = {"Western Arrarnta"},
["arh"] = {"Arhuaco"},
["ari"] = {"Arikara"},
["arj"] = {"Arapaso"},
["ark"] = {"Arikapú"},
["arl"] = {"Arabela"},
["arn"] = {"Mapudungun", "Mapuche"},
["aro"] = {"Araona"},
["arp"] = {"Arapaho"},
["arq"] = {"Algerian Arabic"},
["arr"] = {"Karo (Brazil)"},
["ars"] = {"Najdi Arabic"},
["art"] = {"Artificial languages"},
["aru"] = {"Aruá (Amazonas State)", "Arawá"},
["arv"] = {"Arbore"},
["arw"] = {"Arawak"},
["arx"] = {"Aruá (Rodonia State)"},
["ary"] = {"Moroccan Arabic"},
["arz"] = {"Egyptian Arabic"},
["asa"] = {"Asu (Tanzania)"},
["asb"] = {"Assiniboine"},
["asc"] = {"Casuarina Coast Asmat"},
["ase"] = {"American Sign Language"},
["asf"] = {"Auslan", "Australian Sign Language"},
["asg"] = {"Cishingini"},
["ash"] = {"Abishira"},
["asi"] = {"Buruwai"},
["asj"] = {"Sari"},
["ask"] = {"Ashkun"},
["asl"] = {"Asilulu"},
["asn"] = {"Xingú Asuriní"},
["aso"] = {"Dano"},
["asp"] = {"Algerian Sign Language"},
["asq"] = {"Austrian Sign Language"},
["asr"] = {"Asuri"},
["ass"] = {"Ipulo"},
["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"},
["asu"] = {"Tocantins Asurini"},
["asv"] = {"Asoa"},
["asw"] = {"Australian Aborigines Sign Language"},
["asx"] = {"Muratayak"},
["asy"] = {"Yaosakor Asmat"},
["asz"] = {"As"},
["ata"] = {"Pele-Ata"},
["atb"] = {"Zaiwa"},
["atc"] = {"Atsahuaca"},
["atd"] = {"Ata Manobo"},
["ate"] = {"Atemble"},
["atg"] = {"Ivbie North-Okpela-Arhe"},
["ath"] = {"Athapascan languages"},
["ati"] = {"Attié"},
["atj"] = {"Atikamekw"},
["atk"] = {"Ati"},
["atl"] = {"Mt. Iraya Agta"},
["atm"] = {"Ata"},
["atn"] = {"Ashtiani"},
["ato"] = {"Atong (Cameroon)"},
["atp"] = {"Pudtol Atta"},
["atq"] = {"Aralle-Tabulahan"},
["atr"] = {"Waimiri-Atroari"},
["ats"] = {"Gros Ventre"},
["att"] = {"Pamplona Atta"},
["atu"] = {"Reel"},
["atv"] = {"Northern Altai"},
["atw"] = {"Atsugewi"},
["atx"] = {"Arutani"},
["aty"] = {"Aneityum"},
["atz"] = {"Arta"},
["aua"] = {"Asumboa"},
["aub"] = {"Alugu"},
["auc"] = {"Waorani"},
["aud"] = {"Anuta"},
["auf"] = {"Arauan languages"},
["aug"] = {"Aguna"},
["auh"] = {"Aushi"},
["aui"] = {"Anuki"},
["auj"] = {"Awjilah"},
["auk"] = {"Heyo"},
["aul"] = {"Aulua"},
["aum"] = {"Asu (Nigeria)"},
["aun"] = {"Molmo One"},
["auo"] = {"Auyokawa"},
["aup"] = {"Makayam"},
["auq"] = {"Anus", "Korur"},
["aur"] = {"Aruek"},
["aus"] = {"Australian languages"},
["aut"] = {"Austral"},
["auu"] = {"Auye"},
["auw"] = {"Awyi"},
["aux"] = {"Aurá"},
["auy"] = {"Awiyaana"},
["auz"] = {"Uzbeki Arabic"},
["avb"] = {"Avau"},
["avd"] = {"Alviri-Vidari"},
["avi"] = {"Avikam"},
["avk"] = {"Kotava"},
["avl"] = {"Eastern Egyptian Bedawi Arabic"},
["avm"] = {"Angkamuthi"},
["avn"] = {"Avatime"},
["avo"] = {"Agavotaguerra"},
["avs"] = {"Aushiri"},
["avt"] = {"Au"},
["avu"] = {"Avokaya"},
["avv"] = {"Avá-Canoeiro"},
["awa"] = {"Awadhi"},
["awb"] = {"Awa (Papua New Guinea)"},
["awc"] = {"Cicipu"},
["awd"] = {"Arawakan languages"},
["awe"] = {"Awetí"},
["awg"] = {"Anguthimri"},
["awh"] = {"Awbono"},
["awi"] = {"Aekyom"},
["awk"] = {"Awabakal"},
["awm"] = {"Arawum"},
["awn"] = {"Awngi"},
["awo"] = {"Awak"},
["awr"] = {"Awera"},
["aws"] = {"South Awyu"},
["awt"] = {"Araweté"},
["awu"] = {"Central Awyu"},
["awv"] = {"Jair Awyu"},
["aww"] = {"Awun"},
["awx"] = {"Awara"},
["awy"] = {"Edera Awyu"},
["axb"] = {"Abipon"},
["axe"] = {"Ayerrerenge"},
["axg"] = {"Mato Grosso Arára"},
["axk"] = {"Yaka (Central African Republic)"},
["axl"] = {"Lower Southern Aranda"},
["axm"] = {"Middle Armenian"},
["axx"] = {"Xârâgurè"},
["aya"] = {"Awar"},
["ayb"] = {"Ayizo Gbe"},
["ayc"] = {"Southern Aymara"},
["ayd"] = {"Ayabadhu"},
["aye"] = {"Ayere"},
["ayg"] = {"Ginyanga"},
["ayh"] = {"Hadrami Arabic"},
["ayi"] = {"Leyigha"},
["ayk"] = {"Akuku"},
["ayl"] = {"Libyan Arabic"},
["ayn"] = {"Sanaani Arabic"},
["ayo"] = {"Ayoreo"},
["ayp"] = {"North Mesopotamian Arabic"},
["ayq"] = {"Ayi (Papua New Guinea)"},
["ayr"] = {"Central Aymara"},
["ays"] = {"Sorsogon Ayta"},
["ayt"] = {"Magbukun Ayta"},
["ayu"] = {"Ayu"},
["ayz"] = {"Mai Brat"},
["aza"] = {"Azha"},
["azb"] = {"South Azerbaijani"},
["azc"] = {"Uto-Aztecan languages"},
["azd"] = {"Eastern Durango Nahuatl"},
["azg"] = {"San Pedro Amuzgos Amuzgo"},
["azj"] = {"North Azerbaijani"},
["azm"] = {"Ipalapa Amuzgo"},
["azn"] = {"Western Durango Nahuatl"},
["azo"] = {"Awing"},
["azt"] = {"Faire Atta"},
["azz"] = {"Highland Puebla Nahuatl"},
["baa"] = {"Babatana"},
["bab"] = {"Bainouk-Gunyuño"},
["bac"] = {"Badui"},
["bad"] = {"Banda languages"},
["bae"] = {"Baré"},
["baf"] = {"Nubaca"},
["bag"] = {"Tuki"},
["bah"] = {"Bahamas Creole English"},
["bai"] = {"Bamileke languages"},
["baj"] = {"Barakai"},
["bal"] = {"Baluchi"},
["ban"] = {"Balinese"},
["bao"] = {"Waimaha"},
["bap"] = {"Bantawa"},
["bar"] = {"Bavarian"},
["bas"] = {"Basa (Cameroon)"},
["bat"] = {"Baltic languages"},
["bau"] = {"Bada (Nigeria)"},
["bav"] = {"Vengo"},
["baw"] = {"Bambili-Bambui"},
["bax"] = {"Bamun"},
["bay"] = {"Batuley"},
["bba"] = {"Baatonum"},
["bbb"] = {"Barai"},
["bbc"] = {"Batak Toba"},
["bbd"] = {"Bau"},
["bbe"] = {"Bangba"},
["bbf"] = {"Baibai"},
["bbg"] = {"Barama"},
["bbh"] = {"Bugan"},
["bbi"] = {"Barombi"},
["bbj"] = {"Ghomálá'"},
["bbk"] = {"Babanki"},
["bbl"] = {"Bats"},
["bbm"] = {"Babango"},
["bbn"] = {"Uneapa"},
["bbo"] = {"Northern Bobo Madaré", "Konabéré"},
["bbp"] = {"West Central Banda"},
["bbq"] = {"Bamali"},
["bbr"] = {"Girawa"},
["bbs"] = {"Bakpinka"},
["bbt"] = {"Mburku"},
["bbu"] = {"Kulung (Nigeria)"},
["bbv"] = {"Karnai"},
["bbw"] = {"Baba"},
["bbx"] = {"Bubia"},
["bby"] = {"Befang"},
["bca"] = {"Central Bai"},
["bcb"] = {"Bainouk-Samik"},
["bcc"] = {"Southern Balochi"},
["bcd"] = {"North Babar"},
["bce"] = {"Bamenyam"},
["bcf"] = {"Bamu"},
["bcg"] = {"Baga Pokur"},
["bch"] = {"Bariai"},
["bci"] = {"Baoulé"},
["bcj"] = {"Bardi"},
["bck"] = {"Bunuba"},
["bcl"] = {"Central Bikol"},
["bcm"] = {"Bannoni"},
["bcn"] = {"Bali (Nigeria)"},
["bco"] = {"Kaluli"},
["bcp"] = {"Bali (Democratic Republic of Congo)"},
["bcq"] = {"Bench"},
["bcr"] = {"Babine"},
["bcs"] = {"Kohumono"},
["bct"] = {"Bendi"},
["bcu"] = {"Awad Bing"},
["bcv"] = {"Shoo-Minda-Nye"},
["bcw"] = {"Bana"},
["bcy"] = {"Bacama"},
["bcz"] = {"Bainouk-Gunyaamolo"},
["bda"] = {"Bayot"},
["bdb"] = {"Basap"},
["bdc"] = {"Emberá-Baudó"},
["bdd"] = {"Bunama"},
["bde"] = {"Bade"},
["bdf"] = {"Biage"},
["bdg"] = {"Bonggi"},
["bdh"] = {"Baka (South Sudan)"},
["bdi"] = {"Burun"},
["bdj"] = {"Bai (South Sudan)", "Bai"},
["bdk"] = {"Budukh"},
["bdl"] = {"Indonesian Bajau"},
["bdm"] = {"Buduma"},
["bdn"] = {"Baldemu"},
["bdo"] = {"Morom"},
["bdp"] = {"Bende"},
["bdq"] = {"Bahnar"},
["bdr"] = {"West Coast Bajau"},
["bds"] = {"Burunge"},
["bdt"] = {"Bokoto"},
["bdu"] = {"Oroko"},
["bdv"] = {"Bodo Parja"},
["bdw"] = {"Baham"},
["bdx"] = {"Budong-Budong"},
["bdy"] = {"Bandjalang"},
["bdz"] = {"Badeshi"},
["bea"] = {"Beaver"},
["beb"] = {"Bebele"},
["bec"] = {"Iceve-Maci"},
["bed"] = {"Bedoanas"},
["bee"] = {"Byangsi"},
["bef"] = {"Benabena"},
["beg"] = {"Belait"},
["beh"] = {"Biali"},
["bei"] = {"Bekati'"},
["bej"] = {"Beja", "Bedawiyet"},
["bek"] = {"Bebeli"},
["bem"] = {"Bemba (Zambia)"},
["beo"] = {"Beami"},
["bep"] = {"Besoa"},
["beq"] = {"Beembe"},
["ber"] = {"Berber languages"},
["bes"] = {"Besme"},
["bet"] = {"Guiberoua Béte"},
["beu"] = {"Blagar"},
["bev"] = {"Daloa Bété"},
["bew"] = {"Betawi"},
["bex"] = {"Jur Modo"},
["bey"] = {"Beli (Papua New Guinea)"},
["bez"] = {"Bena (Tanzania)"},
["bfa"] = {"Bari"},
["bfb"] = {"Pauri Bareli"},
["bfc"] = {"Panyi Bai", "Northern Bai"},
["bfd"] = {"Bafut"},
["bfe"] = {"Betaf", "Tena"},
["bff"] = {"Bofi"},
["bfg"] = {"Busang Kayan"},
["bfh"] = {"Blafe"},
["bfi"] = {"British Sign Language"},
["bfj"] = {"Bafanji"},
["bfk"] = {"Ban Khor Sign Language"},
["bfl"] = {"Banda-Ndélé"},
["bfm"] = {"Mmen"},
["bfn"] = {"Bunak"},
["bfo"] = {"Malba Birifor"},
["bfp"] = {"Beba"},
["bfq"] = {"Badaga"},
["bfr"] = {"Bazigar"},
["bfs"] = {"Southern Bai"},
["bft"] = {"Balti"},
["bfu"] = {"Gahri"},
["bfw"] = {"Bondo"},
["bfx"] = {"Bantayanon"},
["bfy"] = {"Bagheli"},
["bfz"] = {"Mahasu Pahari"},
["bga"] = {"Gwamhi-Wuri"},
["bgb"] = {"Bobongko"},
["bgc"] = {"Haryanvi"},
["bgd"] = {"Rathwi Bareli"},
["bge"] = {"Bauria"},
["bgf"] = {"Bangandu"},
["bgg"] = {"Bugun"},
["bgi"] = {"Giangan"},
["bgj"] = {"Bangolan"},
["bgk"] = {"Bit", "Buxinhua"},
["bgl"] = {"Bo (Laos)"},
["bgn"] = {"Western Balochi"},
["bgo"] = {"Baga Koga"},
["bgp"] = {"Eastern Balochi"},
["bgq"] = {"Bagri"},
["bgr"] = {"Bawm Chin"},
["bgs"] = {"Tagabawa"},
["bgt"] = {"Bughotu"},
["bgu"] = {"Mbongno"},
["bgv"] = {"Warkay-Bipim"},
["bgw"] = {"Bhatri"},
["bgx"] = {"Balkan Gagauz Turkish"},
["bgy"] = {"Benggoi"},
["bgz"] = {"Banggai"},
["bha"] = {"Bharia"},
["bhb"] = {"Bhili"},
["bhc"] = {"Biga"},
["bhd"] = {"Bhadrawahi"},
["bhe"] = {"Bhaya"},
["bhf"] = {"Odiai"},
["bhg"] = {"Binandere"},
["bhh"] = {"Bukharic"},
["bhi"] = {"Bhilali"},
["bhj"] = {"Bahing"},
["bhl"] = {"Bimin"},
["bhm"] = {"Bathari"},
["bhn"] = {"Bohtan Neo-Aramaic"},
["bho"] = {"Bhojpuri"},
["bhp"] = {"Bima"},
["bhq"] = {"Tukang Besi South"},
["bhr"] = {"Bara Malagasy"},
["bhs"] = {"Buwal"},
["bht"] = {"Bhattiyali"},
["bhu"] = {"Bhunjia"},
["bhv"] = {"Bahau"},
["bhw"] = {"Biak"},
["bhx"] = {"Bhalay"},
["bhy"] = {"Bhele"},
["bhz"] = {"Bada (Indonesia)"},
["bia"] = {"Badimaya"},
["bib"] = {"Bissa", "Bisa"},
["bid"] = {"Bidiyo"},
["bie"] = {"Bepour"},
["bif"] = {"Biafada"},
["big"] = {"Biangai"},
["bik"] = {"Bikol"},
["bil"] = {"Bile"},
["bim"] = {"Bimoba"},
["bin"] = {"Bini", "Edo"},
["bio"] = {"Nai"},
["bip"] = {"Bila"},
["biq"] = {"Bipi"},
["bir"] = {"Bisorio"},
["bit"] = {"Berinomo"},
["biu"] = {"Biete"},
["biv"] = {"Southern Birifor"},
["biw"] = {"Kol (Cameroon)"},
["bix"] = {"Bijori"},
["biy"] = {"Birhor"},
["biz"] = {"Baloi"},
["bja"] = {"Budza"},
["bjb"] = {"Banggarla"},
["bjc"] = {"Bariji"},
["bje"] = {"Biao-Jiao Mien"},
["bjf"] = {"Barzani Jewish Neo-Aramaic"},
["bjg"] = {"Bidyogo"},
["bjh"] = {"Bahinemo"},
["bji"] = {"Burji"},
["bjj"] = {"Kanauji"},
["bjk"] = {"Barok"},
["bjl"] = {"Bulu (Papua New Guinea)"},
["bjm"] = {"Bajelani"},
["bjn"] = {"Banjar"},
["bjo"] = {"Mid-Southern Banda"},
["bjp"] = {"Fanamaket"},
["bjr"] = {"Binumarien"},
["bjs"] = {"Bajan"},
["bjt"] = {"Balanta-Ganja"},
["bju"] = {"Busuu"},
["bjv"] = {"Bedjond"},
["bjw"] = {"Bakwé"},
["bjx"] = {"Banao Itneg"},
["bjy"] = {"Bayali"},
["bjz"] = {"Baruga"},
["bka"] = {"Kyak"},
["bkc"] = {"Baka (Cameroon)"},
["bkd"] = {"Binukid", "Talaandig"},
["bkf"] = {"Beeke"},
["bkg"] = {"Buraka"},
["bkh"] = {"Bakoko"},
["bki"] = {"Baki"},
["bkj"] = {"Pande"},
["bkk"] = {"Brokskat"},
["bkl"] = {"Berik"},
["bkm"] = {"Kom (Cameroon)"},
["bkn"] = {"Bukitan"},
["bko"] = {"Kwa'"},
["bkp"] = {"Boko (Democratic Republic of Congo)"},
["bkq"] = {"Bakairí"},
["bkr"] = {"Bakumpai"},
["bks"] = {"Northern Sorsoganon"},
["bkt"] = {"Boloki"},
["bku"] = {"Buhid"},
["bkv"] = {"Bekwarra"},
["bkw"] = {"Bekwel"},
["bkx"] = {"Baikeno"},
["bky"] = {"Bokyi"},
["bkz"] = {"Bungku"},
["bla"] = {"Siksika"},
["blb"] = {"Bilua"},
["blc"] = {"Bella Coola"},
["bld"] = {"Bolango"},
["ble"] = {"Balanta-Kentohe"},
["blf"] = {"Buol"},
["blh"] = {"Kuwaa"},
["bli"] = {"Bolia"},
["blj"] = {"Bolongan"},
["blk"] = {"Pa'o Karen", "Pa'O"},
["bll"] = {"Biloxi"},
["blm"] = {"Beli (South Sudan)"},
["bln"] = {"Southern Catanduanes Bikol"},
["blo"] = {"Anii"},
["blp"] = {"Blablanga"},
["blq"] = {"Baluan-Pam"},
["blr"] = {"Blang"},
["bls"] = {"Balaesang"},
["blt"] = {"Tai Dam"},
["blv"] = {"Kibala", "Bolo"},
["blw"] = {"Balangao"},
["blx"] = {"Mag-Indi Ayta"},
["bly"] = {"Notre"},
["blz"] = {"Balantak"},
["bma"] = {"Lame"},
["bmb"] = {"Bembe"},
["bmc"] = {"Biem"},
["bmd"] = {"Baga Manduri"},
["bme"] = {"Limassa"},
["bmf"] = {"Bom-Kim"},
["bmg"] = {"Bamwe"},
["bmh"] = {"Kein"},
["bmi"] = {"Bagirmi"},
["bmj"] = {"Bote-Majhi"},
["bmk"] = {"Ghayavi"},
["bml"] = {"Bomboli"},
["bmm"] = {"Northern Betsimisaraka Malagasy"},
["bmn"] = {"Bina (Papua New Guinea)"},
["bmo"] = {"Bambalang"},
["bmp"] = {"Bulgebi"},
["bmq"] = {"Bomu"},
["bmr"] = {"Muinane"},
["bms"] = {"Bilma Kanuri"},
["bmt"] = {"Biao Mon"},
["bmu"] = {"Somba-Siawari"},
["bmv"] = {"Bum"},
["bmw"] = {"Bomwali"},
["bmx"] = {"Baimak"},
["bmz"] = {"Baramu"},
["bna"] = {"Bonerate"},
["bnb"] = {"Bookan"},
["bnc"] = {"Bontok"},
["bnd"] = {"Banda (Indonesia)"},
["bne"] = {"Bintauna"},
["bnf"] = {"Masiwang"},
["bng"] = {"Benga"},
["bni"] = {"Bangi"},
["bnj"] = {"Eastern Tawbuid"},
["bnk"] = {"Bierebo"},
["bnl"] = {"Boon"},
["bnm"] = {"Batanga"},
["bnn"] = {"Bunun"},
["bno"] = {"Bantoanon"},
["bnp"] = {"Bola"},
["bnq"] = {"Bantik"},
["bnr"] = {"Butmas-Tur"},
["bns"] = {"Bundeli"},
["bnt"] = {"Bantu languages"},
["bnu"] = {"Bentong"},
["bnv"] = {"Bonerif", "Beneraf", "Edwas"},
["bnw"] = {"Bisis"},
["bnx"] = {"Bangubangu"},
["bny"] = {"Bintulu"},
["bnz"] = {"Beezen"},
["boa"] = {"Bora"},
["bob"] = {"Aweer"},
["boe"] = {"Mundabli"},
["bof"] = {"Bolon"},
["bog"] = {"Bamako Sign Language"},
["boh"] = {"Boma"},
["boi"] = {"Barbareño"},
["boj"] = {"Anjam"},
["bok"] = {"Bonjo"},
["bol"] = {"Bole"},
["bom"] = {"Berom"},
["bon"] = {"Bine"},
["boo"] = {"Tiemacèwè Bozo"},
["bop"] = {"Bonkiman"},
["boq"] = {"Bogaya"},
["bor"] = {"Borôro"},
["bot"] = {"Bongo"},
["bou"] = {"Bondei"},
["bov"] = {"Tuwuli"},
["bow"] = {"Rema"},
["box"] = {"Buamu"},
["boy"] = {"Bodo (Central African Republic)"},
["boz"] = {"Tiéyaxo Bozo"},
["bpa"] = {"Daakaka"},
["bpc"] = {"Mbuk"},
["bpd"] = {"Banda-Banda"},
["bpe"] = {"Bauni"},
["bpg"] = {"Bonggo"},
["bph"] = {"Botlikh"},
["bpi"] = {"Bagupi"},
["bpj"] = {"Binji"},
["bpk"] = {"Orowe", "'Ôrôê"},
["bpl"] = {"Broome Pearling Lugger Pidgin"},
["bpm"] = {"Biyom"},
["bpn"] = {"Dzao Min"},
["bpo"] = {"Anasi"},
["bpp"] = {"Kaure"},
["bpq"] = {"Banda Malay"},
["bpr"] = {"Koronadal Blaan"},
["bps"] = {"Sarangani Blaan"},
["bpt"] = {"Barrow Point"},
["bpu"] = {"Bongu"},
["bpv"] = {"Bian Marind"},
["bpw"] = {"Bo (Papua New Guinea)"},
["bpx"] = {"Palya Bareli"},
["bpy"] = {"Bishnupriya"},
["bpz"] = {"Bilba"},
["bqa"] = {"Tchumbuli"},
["bqb"] = {"Bagusa"},
["bqc"] = {"Boko (Benin)", "Boo"},
["bqd"] = {"Bung"},
["bqf"] = {"Baga Kaloum"},
["bqg"] = {"Bago-Kusuntu"},
["bqh"] = {"Baima"},
["bqi"] = {"Bakhtiari"},
["bqj"] = {"Bandial"},
["bqk"] = {"Banda-Mbrès"},
["bql"] = {"Bilakura"},
["bqm"] = {"Wumboko"},
["bqn"] = {"Bulgarian Sign Language"},
["bqo"] = {"Balo"},
["bqp"] = {"Busa"},
["bqq"] = {"Biritai"},
["bqr"] = {"Burusu"},
["bqs"] = {"Bosngun"},
["bqt"] = {"Bamukumbit"},
["bqu"] = {"Boguru"},
["bqv"] = {"Koro Wachi", "Begbere-Ejar"},
["bqw"] = {"Buru (Nigeria)"},
["bqx"] = {"Baangi"},
["bqy"] = {"Bengkala Sign Language"},
["bqz"] = {"Bakaka"},
["bra"] = {"Braj"},
["brb"] = {"Brao", "Lave"},
["brc"] = {"Berbice Creole Dutch"},
["brd"] = {"Baraamu"},
["brf"] = {"Bira"},
["brg"] = {"Baure"},
["brh"] = {"Brahui"},
["bri"] = {"Mokpwe"},
["brj"] = {"Bieria"},
["brk"] = {"Birked"},
["brl"] = {"Birwa"},
["brm"] = {"Barambu"},
["brn"] = {"Boruca"},
["bro"] = {"Brokkat"},
["brp"] = {"Barapasi"},
["brq"] = {"Breri"},
["brr"] = {"Birao"},
["brs"] = {"Baras"},
["brt"] = {"Bitare"},
["bru"] = {"Eastern Bru"},
["brv"] = {"Western Bru"},
["brw"] = {"Bellari"},
["brx"] = {"Bodo (India)"},
["bry"] = {"Burui"},
["brz"] = {"Bilbil"},
["bsa"] = {"Abinomn"},
["bsb"] = {"Brunei Bisaya"},
["bsc"] = {"Bassari", "Oniyan"},
["bse"] = {"Wushi"},
["bsf"] = {"Bauchi"},
["bsg"] = {"Bashkardi"},
["bsh"] = {"Kati"},
["bsi"] = {"Bassossi"},
["bsj"] = {"Bangwinji"},
["bsk"] = {"Burushaski"},
["bsl"] = {"Basa-Gumna"},
["bsm"] = {"Busami"},
["bsn"] = {"Barasana-Eduria"},
["bso"] = {"Buso"},
["bsp"] = {"Baga Sitemu"},
["bsq"] = {"Bassa"},
["bsr"] = {"Bassa-Kontagora"},
["bss"] = {"Akoose"},
["bst"] = {"Basketo"},
["bsu"] = {"Bahonsuai"},
["bsv"] = {"Baga Sobané"},
["bsw"] = {"Baiso"},
["bsx"] = {"Yangkam"},
["bsy"] = {"Sabah Bisaya"},
["bta"] = {"Bata"},
["btc"] = {"Bati (Cameroon)"},
["btd"] = {"Batak Dairi"},
["bte"] = {"Gamo-Ningi"},
["btf"] = {"Birgit"},
["btg"] = {"Gagnoa Bété"},
["bth"] = {"Biatah Bidayuh"},
["bti"] = {"Burate"},
["btj"] = {"Bacanese Malay"},
["btk"] = {"Batak languages"},
["btm"] = {"Batak Mandailing"},
["btn"] = {"Ratagnon"},
["bto"] = {"Rinconada Bikol"},
["btp"] = {"Budibud"},
["btq"] = {"Batek"},
["btr"] = {"Baetora"},
["bts"] = {"Batak Simalungun"},
["btt"] = {"Bete-Bendi"},
["btu"] = {"Batu"},
["btv"] = {"Bateri"},
["btw"] = {"Butuanon"},
["btx"] = {"Batak Karo"},
["bty"] = {"Bobot"},
["btz"] = {"Batak Alas-Kluet"},
["bua"] = {"Buriat"},
["bub"] = {"Bua"},
["buc"] = {"Bushi"},
["bud"] = {"Ntcham"},
["bue"] = {"Beothuk"},
["buf"] = {"Bushoong"},
["bug"] = {"Buginese"},
["buh"] = {"Younuo Bunu"},
["bui"] = {"Bongili"},
["buj"] = {"Basa-Gurmana"},
["buk"] = {"Bugawac"},
["bum"] = {"Bulu (Cameroon)"},
["bun"] = {"Sherbro"},
["buo"] = {"Terei"},
["bup"] = {"Busoa"},
["buq"] = {"Brem"},
["bus"] = {"Bokobaru"},
["but"] = {"Bungain"},
["buu"] = {"Budu"},
["buv"] = {"Bun"},
["buw"] = {"Bubi"},
["bux"] = {"Boghom"},
["buy"] = {"Bullom So"},
["buz"] = {"Bukwen"},
["bva"] = {"Barein"},
["bvb"] = {"Bube"},
["bvc"] = {"Baelelea"},
["bvd"] = {"Baeggu"},
["bve"] = {"Berau Malay"},
["bvf"] = {"Boor"},
["bvg"] = {"Bonkeng"},
["bvh"] = {"Bure"},
["bvi"] = {"Belanda Viri"},
["bvj"] = {"Baan"},
["bvk"] = {"Bukat"},
["bvl"] = {"Bolivian Sign Language"},
["bvm"] = {"Bamunka"},
["bvn"] = {"Buna"},
["bvo"] = {"Bolgo"},
["bvp"] = {"Bumang"},
["bvq"] = {"Birri"},
["bvr"] = {"Burarra"},
["bvt"] = {"Bati (Indonesia)"},
["bvu"] = {"Bukit Malay"},
["bvv"] = {"Baniva"},
["bvw"] = {"Boga"},
["bvx"] = {"Dibole"},
["bvy"] = {"Baybayanon"},
["bvz"] = {"Bauzi"},
["bwa"] = {"Bwatoo"},
["bwb"] = {"Namosi-Naitasiri-Serua"},
["bwc"] = {"Bwile"},
["bwd"] = {"Bwaidoka"},
["bwe"] = {"Bwe Karen"},
["bwf"] = {"Boselewa"},
["bwg"] = {"Barwe"},
["bwh"] = {"Bishuo"},
["bwi"] = {"Baniwa"},
["bwj"] = {"Láá Láá Bwamu"},
["bwk"] = {"Bauwaki"},
["bwl"] = {"Bwela"},
["bwm"] = {"Biwat"},
["bwn"] = {"Wunai Bunu"},
["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"},
["bwp"] = {"Mandobo Bawah"},
["bwq"] = {"Southern Bobo Madaré"},
["bwr"] = {"Bura-Pabir"},
["bws"] = {"Bomboma"},
["bwt"] = {"Bafaw-Balong"},
["bwu"] = {"Buli (Ghana)"},
["bww"] = {"Bwa"},
["bwx"] = {"Bu-Nao Bunu"},
["bwy"] = {"Cwi Bwamu"},
["bwz"] = {"Bwisi"},
["bxa"] = {"Tairaha"},
["bxb"] = {"Belanda Bor"},
["bxc"] = {"Molengue"},
["bxd"] = {"Pela"},
["bxe"] = {"Birale"},
["bxf"] = {"Bilur", "Minigir"},
["bxg"] = {"Bangala"},
["bxh"] = {"Buhutu"},
["bxi"] = {"Pirlatapa"},
["bxj"] = {"Bayungu"},
["bxk"] = {"Bukusu", "Lubukusu"},
["bxl"] = {"Jalkunan"},
["bxm"] = {"Mongolia Buriat"},
["bxn"] = {"Burduna"},
["bxo"] = {"Barikanchi"},
["bxp"] = {"Bebil"},
["bxq"] = {"Beele"},
["bxr"] = {"Russia Buriat"},
["bxs"] = {"Busam"},
["bxu"] = {"China Buriat"},
["bxv"] = {"Berakou"},
["bxw"] = {"Bankagooma"},
["bxz"] = {"Binahari"},
["bya"] = {"Batak"},
["byb"] = {"Bikya"},
["byc"] = {"Ubaghara"},
["byd"] = {"Benyadu'"},
["bye"] = {"Pouye"},
["byf"] = {"Bete"},
["byg"] = {"Baygo"},
["byh"] = {"Bhujel"},
["byi"] = {"Buyu"},
["byj"] = {"Bina (Nigeria)"},
["byk"] = {"Biao"},
["byl"] = {"Bayono"},
["bym"] = {"Bidjara"},
["byn"] = {"Bilin", "Blin"},
["byo"] = {"Biyo"},
["byp"] = {"Bumaji"},
["byq"] = {"Basay"},
["byr"] = {"Baruya", "Yipma"},
["bys"] = {"Burak"},
["byt"] = {"Berti"},
["byv"] = {"Medumba"},
["byw"] = {"Belhariya"},
["byx"] = {"Qaqet"},
["byz"] = {"Banaro"},
["bza"] = {"Bandi"},
["bzb"] = {"Andio"},
["bzc"] = {"Southern Betsimisaraka Malagasy"},
["bzd"] = {"Bribri"},
["bze"] = {"Jenaama Bozo"},
["bzf"] = {"Boikin"},
["bzg"] = {"Babuza"},
["bzh"] = {"Mapos Buang"},
["bzi"] = {"Bisu"},
["bzj"] = {"Belize Kriol English"},
["bzk"] = {"Nicaragua Creole English"},
["bzl"] = {"Boano (Sulawesi)"},
["bzm"] = {"Bolondo"},
["bzn"] = {"Boano (Maluku)"},
["bzo"] = {"Bozaba"},
["bzp"] = {"Kemberano"},
["bzq"] = {"Buli (Indonesia)"},
["bzr"] = {"Biri"},
["bzs"] = {"Brazilian Sign Language"},
["bzt"] = {"Brithenig"},
["bzu"] = {"Burmeso"},
["bzv"] = {"Naami"},
["bzw"] = {"Basa (Nigeria)"},
["bzx"] = {"Kɛlɛngaxo Bozo"},
["bzy"] = {"Obanliku"},
["bzz"] = {"Evant"},
["caa"] = {"Chortí"},
["cab"] = {"Garifuna"},
["cac"] = {"Chuj"},
["cad"] = {"Caddo"},
["cae"] = {"Lehar", "Laalaa"},
["caf"] = {"Southern Carrier"},
["cag"] = {"Nivaclé"},
["cah"] = {"Cahuarano"},
["cai"] = {"Central American Indian languages"},
["caj"] = {"Chané"},
["cak"] = {"Kaqchikel", "Cakchiquel"},
["cal"] = {"Carolinian"},
["cam"] = {"Cemuhî"},
["can"] = {"Chambri"},
["cao"] = {"Chácobo"},
["cap"] = {"Chipaya"},
["caq"] = {"Car Nicobarese"},
["car"] = {"Galibi Carib"},
["cas"] = {"Tsimané"},
["cau"] = {"Caucasian languages"},
["cav"] = {"Cavineña"},
["caw"] = {"Callawalla"},
["cax"] = {"Chiquitano"},
["cay"] = {"Cayuga"},
["caz"] = {"Canichana"},
["cba"] = {"Chibchan languages"},
["cbb"] = {"Cabiyarí"},
["cbc"] = {"Carapana"},
["cbd"] = {"Carijona"},
["cbg"] = {"Chimila"},
["cbi"] = {"Chachi"},
["cbj"] = {"Ede Cabe"},
["cbk"] = {"Chavacano"},
["cbl"] = {"Bualkhaw Chin"},
["cbn"] = {"Nyahkur"},
["cbo"] = {"Izora"},
["cbq"] = {"Tsucuba", "Cuba"},
["cbr"] = {"Cashibo-Cacataibo"},
["cbs"] = {"Cashinahua"},
["cbt"] = {"Chayahuita"},
["cbu"] = {"Candoshi-Shapra"},
["cbv"] = {"Cacua"},
["cbw"] = {"Kinabalian"},
["cby"] = {"Carabayo"},
["ccc"] = {"Chamicuro"},
["ccd"] = {"Cafundo Creole"},
["cce"] = {"Chopi"},
["ccg"] = {"Samba Daka"},
["cch"] = {"Atsam"},
["ccj"] = {"Kasanga"},
["ccl"] = {"Cutchi-Swahili"},
["ccm"] = {"Malaccan Creole Malay"},
["ccn"] = {"North Caucasian languages"},
["cco"] = {"Comaltepec Chinantec"},
["ccp"] = {"Chakma"},
["ccr"] = {"Cacaopera"},
["ccs"] = {"South Caucasian languages"},
["cda"] = {"Choni"},
["cdc"] = {"Chadic languages"},
["cdd"] = {"Caddoan languages"},
["cde"] = {"Chenchu"},
["cdf"] = {"Chiru"},
["cdh"] = {"Chambeali"},
["cdi"] = {"Chodri"},
["cdj"] = {"Churahi"},
["cdm"] = {"Chepang"},
["cdn"] = {"Chaudangsi"},
["cdo"] = {"Min Dong Chinese"},
["cdr"] = {"Cinda-Regi-Tiyal"},
["cds"] = {"Chadian Sign Language"},
["cdy"] = {"Chadong"},
["cdz"] = {"Koda"},
["cea"] = {"Lower Chehalis"},
["ceb"] = {"Cebuano"},
["ceg"] = {"Chamacoco"},
["cek"] = {"Eastern Khumi Chin"},
["cel"] = {"Celtic languages"},
["cen"] = {"Cen"},
["cet"] = {"Centúúm"},
["cey"] = {"Ekai Chin"},
["cfa"] = {"Dijim-Bwilim"},
["cfd"] = {"Cara"},
["cfg"] = {"Como Karim"},
["cfm"] = {"Falam Chin"},
["cga"] = {"Changriwa"},
["cgc"] = {"Kagayanen"},
["cgg"] = {"Chiga"},
["cgk"] = {"Chocangacakha"},
["chb"] = {"Chibcha"},
["chc"] = {"Catawba"},
["chd"] = {"Highland Oaxaca Chontal"},
["chf"] = {"Tabasco Chontal"},
["chg"] = {"Chagatai"},
["chh"] = {"Chinook"},
["chj"] = {"Ojitlán Chinantec"},
["chk"] = {"Chuukese"},
["chl"] = {"Cahuilla"},
["chm"] = {"Mari (Russia)"},
["chn"] = {"Chinook jargon"},
["cho"] = {"Choctaw"},
["chp"] = {"Chipewyan", "Dene Suline"},
["chq"] = {"Quiotepec Chinantec"},
["chr"] = {"Cherokee"},
["cht"] = {"Cholón"},
["chw"] = {"Chuwabu"},
["chx"] = {"Chantyal"},
["chy"] = {"Cheyenne"},
["chz"] = {"Ozumacín Chinantec"},
["cia"] = {"Cia-Cia"},
["cib"] = {"Ci Gbe"},
["cic"] = {"Chickasaw"},
["cid"] = {"Chimariko"},
["cie"] = {"Cineni"},
["cih"] = {"Chinali"},
["cik"] = {"Chitkuli Kinnauri"},
["cim"] = {"Cimbrian"},
["cin"] = {"Cinta Larga"},
["cip"] = {"Chiapanec"},
["cir"] = {"Tiri", "Haméa", "Méa"},
["ciw"] = {"Chippewa"},
["ciy"] = {"Chaima"},
["cja"] = {"Western Cham"},
["cje"] = {"Chru"},
["cjh"] = {"Upper Chehalis"},
["cji"] = {"Chamalal"},
["cjk"] = {"Chokwe"},
["cjm"] = {"Eastern Cham"},
["cjn"] = {"Chenapian"},
["cjo"] = {"Ashéninka Pajonal"},
["cjp"] = {"Cabécar"},
["cjs"] = {"Shor"},
["cjv"] = {"Chuave"},
["cjy"] = {"Jinyu Chinese"},
["ckb"] = {"Central Kurdish"},
["ckh"] = {"Chak"},
["ckl"] = {"Cibak"},
["ckm"] = {"Chakavian"},
["ckn"] = {"Kaang Chin"},
["cko"] = {"Anufo"},
["ckq"] = {"Kajakse"},
["ckr"] = {"Kairak"},
["cks"] = {"Tayo"},
["ckt"] = {"Chukot"},
["cku"] = {"Koasati"},
["ckv"] = {"Kavalan"},
["ckx"] = {"Caka"},
["cky"] = {"Cakfem-Mushere"},
["ckz"] = {"Cakchiquel-Quiché Mixed Language"},
["cla"] = {"Ron"},
["clc"] = {"Chilcotin"},
["cld"] = {"Chaldean Neo-Aramaic"},
["cle"] = {"Lealao Chinantec"},
["clh"] = {"Chilisso"},
["cli"] = {"Chakali"},
["clj"] = {"Laitu Chin"},
["clk"] = {"Idu-Mishmi"},
["cll"] = {"Chala"},
["clm"] = {"Clallam"},
["clo"] = {"Lowland Oaxaca Chontal"},
["clt"] = {"Lautu Chin"},
["clu"] = {"Caluyanun"},
["clw"] = {"Chulym"},
["cly"] = {"Eastern Highland Chatino"},
["cma"] = {"Maa"},
["cmc"] = {"Chamic languages"},
["cme"] = {"Cerma"},
["cmg"] = {"Classical Mongolian"},
["cmi"] = {"Emberá-Chamí"},
["cml"] = {"Campalagian"},
["cmm"] = {"Michigamea"},
["cmn"] = {"Mandarin Chinese"},
["cmo"] = {"Central Mnong"},
["cmr"] = {"Mro-Khimi Chin"},
["cms"] = {"Messapic"},
["cmt"] = {"Camtho"},
["cna"] = {"Changthang"},
["cnb"] = {"Chinbon Chin"},
["cnc"] = {"Côông"},
["cng"] = {"Northern Qiang"},
["cnh"] = {"Hakha Chin", "Haka Chin"},
["cni"] = {"Asháninka"},
["cnk"] = {"Khumi Chin"},
["cnl"] = {"Lalana Chinantec"},
["cno"] = {"Con"},
["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"},
["cnq"] = {"Chung"},
["cnr"] = {"Montenegrin"},
["cns"] = {"Central Asmat"},
["cnt"] = {"Tepetotutla Chinantec"},
["cnu"] = {"Chenoua"},
["cnw"] = {"Ngawn Chin"},
["cnx"] = {"Middle Cornish"},
["coa"] = {"Cocos Islands Malay"},
["cob"] = {"Chicomuceltec"},
["coc"] = {"Cocopa"},
["cod"] = {"Cocama-Cocamilla"},
["coe"] = {"Koreguaje"},
["cof"] = {"Colorado"},
["cog"] = {"Chong"},
["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"},
["coj"] = {"Cochimi"},
["cok"] = {"Santa Teresa Cora"},
["col"] = {"Columbia-Wenatchi"},
["com"] = {"Comanche"},
["con"] = {"Cofán"},
["coo"] = {"Comox"},
["cop"] = {"Coptic"},
["coq"] = {"Coquille"},
["cot"] = {"Caquinte"},
["cou"] = {"Wamey"},
["cov"] = {"Cao Miao"},
["cow"] = {"Cowlitz"},
["cox"] = {"Nanti"},
["coz"] = {"Chochotec"},
["cpa"] = {"Palantla Chinantec"},
["cpb"] = {"Ucayali-Yurúa Ashéninka"},
["cpc"] = {"Ajyíninka Apurucayali"},
["cpe"] = {"English-based creoles and pidgins"},
["cpf"] = {"French-based creoles and pidgins"},
["cpg"] = {"Cappadocian Greek"},
["cpi"] = {"Chinese Pidgin English"},
["cpn"] = {"Cherepon"},
["cpo"] = {"Kpeego"},
["cpp"] = {"Portuguese-based creoles and pidgins"},
["cps"] = {"Capiznon"},
["cpu"] = {"Pichis Ashéninka"},
["cpx"] = {"Pu-Xian Chinese"},
["cpy"] = {"South Ucayali Ashéninka"},
["cqd"] = {"Chuanqiandian Cluster Miao"},
["cra"] = {"Chara"},
["crb"] = {"Island Carib"},
["crc"] = {"Lonwolwol"},
["crd"] = {"Coeur d'Alene"},
["crf"] = {"Caramanta"},
["crg"] = {"Michif"},
["crh"] = {"Crimean Tatar", "Crimean Turkish"},
["cri"] = {"Sãotomense"},
["crj"] = {"Southern East Cree"},
["crk"] = {"Plains Cree"},
["crl"] = {"Northern East Cree"},
["crm"] = {"Moose Cree"},
["crn"] = {"El Nayar Cora"},
["cro"] = {"Crow"},
["crp"] = {"Creoles and pidgins"},
["crq"] = {"Iyo'wujwa Chorote"},
["crr"] = {"Carolina Algonquian"},
["crs"] = {"Seselwa Creole French"},
["crt"] = {"Iyojwa'ja Chorote"},
["crv"] = {"Chaura"},
["crw"] = {"Chrau"},
["crx"] = {"Carrier"},
["cry"] = {"Cori"},
["crz"] = {"Cruzeño"},
["csa"] = {"Chiltepec Chinantec"},
["csb"] = {"Kashubian"},
["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"},
["csd"] = {"Chiangmai Sign Language"},
["cse"] = {"Czech Sign Language"},
["csf"] = {"Cuba Sign Language"},
["csg"] = {"Chilean Sign Language"},
["csh"] = {"Asho Chin"},
["csi"] = {"Coast Miwok"},
["csj"] = {"Songlai Chin"},
["csk"] = {"Jola-Kasa"},
["csl"] = {"Chinese Sign Language"},
["csm"] = {"Central Sierra Miwok"},
["csn"] = {"Colombian Sign Language"},
["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"},
["csp"] = {"Southern Ping Chinese", "Southern Pinghua"},
["csq"] = {"Croatia Sign Language"},
["csr"] = {"Costa Rican Sign Language"},
["css"] = {"Southern Ohlone"},
["cst"] = {"Northern Ohlone"},
["csu"] = {"Central Sudanic languages"},
["csv"] = {"Sumtu Chin"},
["csw"] = {"Swampy Cree"},
["csx"] = {"Cambodian Sign Language"},
["csy"] = {"Siyin Chin"},
["csz"] = {"Coos"},
["cta"] = {"Tataltepec Chatino"},
["ctc"] = {"Chetco"},
["ctd"] = {"Tedim Chin"},
["cte"] = {"Tepinapa Chinantec"},
["ctg"] = {"Chittagonian"},
["cth"] = {"Thaiphum Chin"},
["ctl"] = {"Tlacoatzintepec Chinantec"},
["ctm"] = {"Chitimacha"},
["ctn"] = {"Chhintange"},
["cto"] = {"Emberá-Catío"},
["ctp"] = {"Western Highland Chatino"},
["cts"] = {"Northern Catanduanes Bikol"},
["ctt"] = {"Wayanad Chetti"},
["ctu"] = {"Chol"},
["cty"] = {"Moundadan Chetty"},
["ctz"] = {"Zacatepec Chatino"},
["cua"] = {"Cua"},
["cub"] = {"Cubeo"},
["cuc"] = {"Usila Chinantec"},
["cuh"] = {"Chuka", "Gichuka"},
["cui"] = {"Cuiba"},
["cuj"] = {"Mashco Piro"},
["cuk"] = {"San Blas Kuna"},
["cul"] = {"Culina", "Kulina"},
["cuo"] = {"Cumanagoto"},
["cup"] = {"Cupeño"},
["cuq"] = {"Cun"},
["cur"] = {"Chhulung"},
["cus"] = {"Cushitic languages"},
["cut"] = {"Teutila Cuicatec"},
["cuu"] = {"Tai Ya"},
["cuv"] = {"Cuvok"},
["cuw"] = {"Chukwa"},
["cux"] = {"Tepeuxila Cuicatec"},
["cuy"] = {"Cuitlatec"},
["cvg"] = {"Chug"},
["cvn"] = {"Valle Nacional Chinantec"},
["cwa"] = {"Kabwa"},
["cwb"] = {"Maindo"},
["cwd"] = {"Woods Cree"},
["cwe"] = {"Kwere"},
["cwg"] = {"Chewong", "Cheq Wong"},
["cwt"] = {"Kuwaataay"},
["cxh"] = {"Cha'ari"},
["cya"] = {"Nopala Chatino"},
["cyb"] = {"Cayubaba"},
["cyo"] = {"Cuyonon"},
["czh"] = {"Huizhou Chinese"},
["czk"] = {"Knaanic"},
["czn"] = {"Zenzontepec Chatino"},
["czo"] = {"Min Zhong Chinese"},
["czt"] = {"Zotung Chin"},
["daa"] = {"Dangaléat"},
["dac"] = {"Dambi"},
["dad"] = {"Marik"},
["dae"] = {"Duupa"},
["dag"] = {"Dagbani"},
["dah"] = {"Gwahatike"},
["dai"] = {"Day"},
["daj"] = {"Dar Fur Daju"},
["dak"] = {"Dakota"},
["dal"] = {"Dahalo"},
["dam"] = {"Damakawa"},
["dao"] = {"Daai Chin"},
["daq"] = {"Dandami Maria"},
["dar"] = {"Dargwa"},
["das"] = {"Daho-Doo"},
["dau"] = {"Dar Sila Daju"},
["dav"] = {"Taita", "Dawida"},
["daw"] = {"Davawenyo"},
["dax"] = {"Dayi"},
["day"] = {"Land Dayak languages"},
["daz"] = {"Dao"},
["dba"] = {"Bangime"},
["dbb"] = {"Deno"},
["dbd"] = {"Dadiya"},
["dbe"] = {"Dabe"},
["dbf"] = {"Edopi"},
["dbg"] = {"Dogul Dom Dogon"},
["dbi"] = {"Doka"},
["dbj"] = {"Ida'an"},
["dbl"] = {"Dyirbal"},
["dbm"] = {"Duguri"},
["dbn"] = {"Duriankere"},
["dbo"] = {"Dulbu"},
["dbp"] = {"Duwai"},
["dbq"] = {"Daba"},
["dbr"] = {"Dabarre"},
["dbt"] = {"Ben Tey Dogon"},
["dbu"] = {"Bondum Dom Dogon"},
["dbv"] = {"Dungu"},
["dbw"] = {"Bankan Tey Dogon"},
["dby"] = {"Dibiyaso"},
["dcc"] = {"Deccan"},
["dcr"] = {"Negerhollands"},
["dda"] = {"Dadi Dadi"},
["ddd"] = {"Dongotono"},
["dde"] = {"Doondo"},
["ddg"] = {"Fataluku"},
["ddi"] = {"West Goodenough"},
["ddj"] = {"Jaru"},
["ddn"] = {"Dendi (Benin)"},
["ddo"] = {"Dido"},
["ddr"] = {"Dhudhuroa"},
["dds"] = {"Donno So Dogon"},
["ddw"] = {"Dawera-Daweloor"},
["dec"] = {"Dagik"},
["ded"] = {"Dedua"},
["dee"] = {"Dewoin"},
["def"] = {"Dezfuli"},
["deg"] = {"Degema"},
["deh"] = {"Dehwari"},
["dei"] = {"Demisa"},
["dek"] = {"Dek"},
["del"] = {"Delaware"},
["dem"] = {"Dem"},
["den"] = {"Slave (Athapascan)"},
["dep"] = {"Pidgin Delaware"},
["deq"] = {"Dendi (Central African Republic)"},
["der"] = {"Deori"},
["des"] = {"Desano"},
["dev"] = {"Domung"},
["dez"] = {"Dengese"},
["dga"] = {"Southern Dagaare"},
["dgb"] = {"Bunoge Dogon"},
["dgc"] = {"Casiguran Dumagat Agta"},
["dgd"] = {"Dagaari Dioula"},
["dge"] = {"Degenan"},
["dgg"] = {"Doga"},
["dgh"] = {"Dghwede"},
["dgi"] = {"Northern Dagara"},
["dgk"] = {"Dagba"},
["dgl"] = {"Andaandi", "Dongolawi"},
["dgn"] = {"Dagoman"},
["dgo"] = {"Dogri (individual language)"},
["dgr"] = {"Dogrib", "Tłı̨chǫ"},
["dgs"] = {"Dogoso"},
["dgt"] = {"Ndra'ngith"},
["dgw"] = {"Daungwurrung"},
["dgx"] = {"Doghoro"},
["dgz"] = {"Daga"},
["dhd"] = {"Dhundari"},
["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"},
["dhi"] = {"Dhimal"},
["dhl"] = {"Dhalandji"},
["dhm"] = {"Zemba"},
["dhn"] = {"Dhanki"},
["dho"] = {"Dhodia"},
["dhr"] = {"Dhargari"},
["dhs"] = {"Dhaiso"},
["dhu"] = {"Dhurga"},
["dhv"] = {"Dehu", "Drehu"},
["dhw"] = {"Dhanwar (Nepal)"},
["dhx"] = {"Dhungaloo"},
["dia"] = {"Dia"},
["dib"] = {"South Central Dinka"},
["dic"] = {"Lakota Dida"},
["did"] = {"Didinga"},
["dif"] = {"Dieri", "Diyari"},
["dig"] = {"Digo", "Chidigo"},
["dih"] = {"Kumiai"},
["dii"] = {"Dimbong"},
["dij"] = {"Dai"},
["dik"] = {"Southwestern Dinka"},
["dil"] = {"Dilling"},
["dim"] = {"Dime"},
["din"] = {"Dinka"},
["dio"] = {"Dibo"},
["dip"] = {"Northeastern Dinka"},
["diq"] = {"Dimli (individual language)"},
["dir"] = {"Dirim"},
["dis"] = {"Dimasa"},
["diu"] = {"Diriku"},
["diw"] = {"Northwestern Dinka"},
["dix"] = {"Dixon Reef"},
["diy"] = {"Diuwe"},
["diz"] = {"Ding"},
["dja"] = {"Djadjawurrung"},
["djb"] = {"Djinba"},
["djc"] = {"Dar Daju Daju"},
["djd"] = {"Djamindjung", "Ngaliwurru"},
["dje"] = {"Zarma"},
["djf"] = {"Djangun"},
["dji"] = {"Djinang"},
["djj"] = {"Djeebbana"},
["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"},
["djm"] = {"Jamsay Dogon"},
["djn"] = {"Jawoyn", "Djauan"},
["djo"] = {"Jangkang"},
["djr"] = {"Djambarrpuyngu"},
["dju"] = {"Kapriman"},
["djw"] = {"Djawi"},
["dka"] = {"Dakpakha"},
["dkg"] = {"Kadung"},
["dkk"] = {"Dakka"},
["dkr"] = {"Kuijau"},
["dks"] = {"Southeastern Dinka"},
["dkx"] = {"Mazagway"},
["dlg"] = {"Dolgan"},
["dlk"] = {"Dahalik"},
["dlm"] = {"Dalmatian"},
["dln"] = {"Darlong"},
["dma"] = {"Duma"},
["dmb"] = {"Mombo Dogon"},
["dmc"] = {"Gavak"},
["dmd"] = {"Madhi Madhi"},
["dme"] = {"Dugwor"},
["dmf"] = {"Medefaidrin"},
["dmg"] = {"Upper Kinabatangan"},
["dmk"] = {"Domaaki"},
["dml"] = {"Dameli"},
["dmm"] = {"Dama"},
["dmn"] = {"Mande languages"},
["dmo"] = {"Kemedzung"},
["dmr"] = {"East Damar"},
["dms"] = {"Dampelas"},
["dmu"] = {"Dubu", "Tebi"},
["dmv"] = {"Dumpas"},
["dmw"] = {"Mudburra"},
["dmx"] = {"Dema"},
["dmy"] = {"Demta", "Sowari"},
["dna"] = {"Upper Grand Valley Dani"},
["dnd"] = {"Daonda"},
["dne"] = {"Ndendeule"},
["dng"] = {"Dungan"},
["dni"] = {"Lower Grand Valley Dani"},
["dnj"] = {"Dan"},
["dnk"] = {"Dengka"},
["dnn"] = {"Dzùùngoo"},
["dno"] = {"Ndrulo", "Northern Lendu"},
["dnr"] = {"Danaru"},
["dnt"] = {"Mid Grand Valley Dani"},
["dnu"] = {"Danau"},
["dnv"] = {"Danu"},
["dnw"] = {"Western Dani"},
["dny"] = {"Dení"},
["doa"] = {"Dom"},
["dob"] = {"Dobu"},
["doc"] = {"Northern Dong"},
["doe"] = {"Doe"},
["dof"] = {"Domu"},
["doh"] = {"Dong"},
["doi"] = {"Dogri (macrolanguage)"},
["dok"] = {"Dondo"},
["dol"] = {"Doso"},
["don"] = {"Toura (Papua New Guinea)"},
["doo"] = {"Dongo"},
["dop"] = {"Lukpa"},
["doq"] = {"Dominican Sign Language"},
["dor"] = {"Dori'o"},
["dos"] = {"Dogosé"},
["dot"] = {"Dass"},
["dov"] = {"Dombe"},
["dow"] = {"Doyayo"},
["dox"] = {"Bussa"},
["doy"] = {"Dompo"},
["doz"] = {"Dorze"},
["dpp"] = {"Papar"},
["dra"] = {"Dravidian languages"},
["drb"] = {"Dair"},
["drc"] = {"Minderico"},
["drd"] = {"Darmiya"},
["dre"] = {"Dolpo"},
["drg"] = {"Rungus"},
["dri"] = {"C'Lela"},
["drl"] = {"Paakantyi"},
["drn"] = {"West Damar"},
["dro"] = {"Daro-Matu Melanau"},
["drq"] = {"Dura"},
["drs"] = {"Gedeo"},
["drt"] = {"Drents"},
["dru"] = {"Rukai"},
["dry"] = {"Darai"},
["dsb"] = {"Lower Sorbian"},
["dse"] = {"Dutch Sign Language"},
["dsh"] = {"Daasanach"},
["dsi"] = {"Disa"},
["dsk"] = {"Dokshi"},
["dsl"] = {"Danish Sign Language"},
["dsn"] = {"Dusner"},
["dso"] = {"Desiya"},
["dsq"] = {"Tadaksahak"},
["dsz"] = {"Mardin Sign Language"},
["dta"] = {"Daur"},
["dtb"] = {"Labuk-Kinabatangan Kadazan"},
["dtd"] = {"Ditidaht"},
["dth"] = {"Adithinngithigh"},
["dti"] = {"Ana Tinga Dogon"},
["dtk"] = {"Tene Kan Dogon"},
["dtm"] = {"Tomo Kan Dogon"},
["dtn"] = {"Daatsʼíin"},
["dto"] = {"Tommo So Dogon"},
["dtp"] = {"Kadazan Dusun", "Central Dusun"},
["dtr"] = {"Lotud"},
["dts"] = {"Toro So Dogon"},
["dtt"] = {"Toro Tegu Dogon"},
["dtu"] = {"Tebul Ure Dogon"},
["dty"] = {"Dotyali"},
["dua"] = {"Duala"},
["dub"] = {"Dubli"},
["duc"] = {"Duna"},
["due"] = {"Umiray Dumaget Agta"},
["duf"] = {"Dumbea", "Drubea"},
["dug"] = {"Duruma", "Chiduruma"},
["duh"] = {"Dungra Bhil"},
["dui"] = {"Dumun"},
["duk"] = {"Uyajitaya"},
["dul"] = {"Alabat Island Agta"},
["dum"] = {"Middle Dutch (ca. 1050-1350)"},
["dun"] = {"Dusun Deyah"},
["duo"] = {"Dupaninan Agta"},
["dup"] = {"Duano"},
["duq"] = {"Dusun Malang"},
["dur"] = {"Dii"},
["dus"] = {"Dumi"},
["duu"] = {"Drung"},
["duv"] = {"Duvle"},
["duw"] = {"Dusun Witu"},
["dux"] = {"Duungooma"},
["duy"] = {"Dicamay Agta"},
["duz"] = {"Duli-Gey"},
["dva"] = {"Duau"},
["dwa"] = {"Diri"},
["dwk"] = {"Dawik Kui"},
["dwr"] = {"Dawro"},
["dws"] = {"Dutton World Speedwords"},
["dwu"] = {"Dhuwal"},
["dww"] = {"Dawawa"},
["dwy"] = {"Dhuwaya"},
["dwz"] = {"Dewas Rai"},
["dya"] = {"Dyan"},
["dyb"] = {"Dyaberdyaber"},
["dyd"] = {"Dyugun"},
["dyg"] = {"Villa Viciosa Agta"},
["dyi"] = {"Djimini Senoufo"},
["dym"] = {"Yanda Dom Dogon"},
["dyn"] = {"Dyangadi", "Dhanggatti"},
["dyo"] = {"Jola-Fonyi"},
["dyr"] = {"Dyarim"},
["dyu"] = {"Dyula"},
["dyy"] = {"Djabugay", "Dyaabugay"},
["dza"] = {"Tunzu"},
["dzd"] = {"Daza"},
["dze"] = {"Djiwarli"},
["dzg"] = {"Dazaga"},
["dzl"] = {"Dzalakha"},
["dzn"] = {"Dzando"},
["eaa"] = {"Karenggapa"},
["ebc"] = {"Beginci"},
["ebg"] = {"Ebughu"},
["ebk"] = {"Eastern Bontok"},
["ebo"] = {"Teke-Ebo"},
["ebr"] = {"Ebrié"},
["ebu"] = {"Embu", "Kiembu"},
["ecr"] = {"Eteocretan"},
["ecs"] = {"Ecuadorian Sign Language"},
["ecy"] = {"Eteocypriot"},
["eee"] = {"E"},
["efa"] = {"Efai"},
["efe"] = {"Efe"},
["efi"] = {"Efik"},
["ega"] = {"Ega"},
["egl"] = {"Emilian"},
["egm"] = {"Benamanga"},
["ego"] = {"Eggon"},
["egx"] = {"Egyptian languages"},
["egy"] = {"Egyptian (Ancient)"},
["ehs"] = {"Miyakubo Sign Language"},
["ehu"] = {"Ehueun"},
["eip"] = {"Eipomek"},
["eit"] = {"Eitiep"},
["eiv"] = {"Askopan"},
["eja"] = {"Ejamat"},
["eka"] = {"Ekajuk"},
["eke"] = {"Ekit"},
["ekg"] = {"Ekari"},
["eki"] = {"Eki"},
["ekk"] = {"Standard Estonian"},
["ekl"] = {"Kol (Bangladesh)", "Kol"},
["ekm"] = {"Elip"},
["eko"] = {"Koti"},
["ekp"] = {"Ekpeye"},
["ekr"] = {"Yace"},
["eky"] = {"Eastern Kayah"},
["ele"] = {"Elepi"},
["elh"] = {"El Hugeirat"},
["eli"] = {"Nding"},
["elk"] = {"Elkei"},
["elm"] = {"Eleme"},
["elo"] = {"El Molo"},
["elu"] = {"Elu"},
["elx"] = {"Elamite"},
["ema"] = {"Emai-Iuleha-Ora"},
["emb"] = {"Embaloh"},
["eme"] = {"Emerillon"},
["emg"] = {"Eastern Meohang"},
["emi"] = {"Mussau-Emira"},
["emk"] = {"Eastern Maninkakan"},
["emm"] = {"Mamulique"},
["emn"] = {"Eman"},
["emp"] = {"Northern Emberá"},
["emq"] = {"Eastern Minyag"},
["ems"] = {"Pacific Gulf Yupik"},
["emu"] = {"Eastern Muria"},
["emw"] = {"Emplawas"},
["emx"] = {"Erromintxela"},
["emy"] = {"Epigraphic Mayan"},
["emz"] = {"Mbessa"},
["ena"] = {"Apali"},
["enb"] = {"Markweeta"},
["enc"] = {"En"},
["end"] = {"Ende"},
["enf"] = {"Forest Enets"},
["enh"] = {"Tundra Enets"},
["enl"] = {"Enlhet"},
["enm"] = {"Middle English (1100-1500)"},
["enn"] = {"Engenni"},
["eno"] = {"Enggano"},
["enq"] = {"Enga"},
["enr"] = {"Emumu", "Emem"},
["enu"] = {"Enu"},
["env"] = {"Enwan (Edo State)"},
["enw"] = {"Enwan (Akwa Ibom State)"},
["enx"] = {"Enxet"},
["eot"] = {"Beti (Côte d'Ivoire)"},
["epi"] = {"Epie"},
["era"] = {"Eravallan"},
["erg"] = {"Sie"},
["erh"] = {"Eruwa"},
["eri"] = {"Ogea"},
["erk"] = {"South Efate"},
["ero"] = {"Horpa"},
["err"] = {"Erre"},
["ers"] = {"Ersu"},
["ert"] = {"Eritai"},
["erw"] = {"Erokwanas"},
["ese"] = {"Ese Ejja"},
["esg"] = {"Aheri Gondi"},
["esh"] = {"Eshtehardi"},
["esi"] = {"North Alaskan Inupiatun"},
["esk"] = {"Northwest Alaska Inupiatun"},
["esl"] = {"Egypt Sign Language"},
["esm"] = {"Esuma"},
["esn"] = {"Salvadoran Sign Language"},
["eso"] = {"Estonian Sign Language"},
["esq"] = {"Esselen"},
["ess"] = {"Central Siberian Yupik"},
["esu"] = {"Central Yupik"},
["esx"] = {"Eskimo-Aleut languages"},
["esy"] = {"Eskayan"},
["etb"] = {"Etebi"},
["etc"] = {"Etchemin"},
["eth"] = {"Ethiopian Sign Language"},
["etn"] = {"Eton (Vanuatu)"},
["eto"] = {"Eton (Cameroon)"},
["etr"] = {"Edolo"},
["ets"] = {"Yekhee"},
["ett"] = {"Etruscan"},
["etu"] = {"Ejagham"},
["etx"] = {"Eten"},
["etz"] = {"Semimi"},
["eud"] = {"Eudeve"},
["euq"] = {"Basque (family)"},
["eve"] = {"Even"},
["evh"] = {"Uvbie"},
["evn"] = {"Evenki"},
["ewo"] = {"Ewondo"},
["ext"] = {"Extremaduran"},
["eya"] = {"Eyak"},
["eyo"] = {"Keiyo"},
["eza"] = {"Ezaa"},
["eze"] = {"Uzekwe"},
["faa"] = {"Fasu"},
["fab"] = {"Fa d'Ambu"},
["fad"] = {"Wagi"},
["faf"] = {"Fagani"},
["fag"] = {"Finongan"},
["fah"] = {"Baissa Fali"},
["fai"] = {"Faiwol"},
["faj"] = {"Faita"},
["fak"] = {"Fang (Cameroon)"},
["fal"] = {"South Fali"},
["fam"] = {"Fam"},
["fan"] = {"Fang (Equatorial Guinea)"},
["fap"] = {"Paloor"},
["far"] = {"Fataleka"},
["fat"] = {"Fanti"},
["fau"] = {"Fayu"},
["fax"] = {"Fala"},
["fay"] = {"Southwestern Fars"},
["faz"] = {"Northwestern Fars"},
["fbl"] = {"West Albay Bikol"},
["fcs"] = {"Quebec Sign Language"},
["fer"] = {"Feroge"},
["ffi"] = {"Foia Foia"},
["ffm"] = {"Maasina Fulfulde"},
["fgr"] = {"Fongoro"},
["fia"] = {"Nobiin"},
["fie"] = {"Fyer"},
["fif"] = {"Faifi"},
["fil"] = {"Filipino", "Pilipino"},
["fip"] = {"Fipa"},
["fir"] = {"Firan"},
["fit"] = {"Tornedalen Finnish", "Meänkieli"},
["fiu"] = {"Finno-Ugrian languages"},
["fiw"] = {"Fiwaga"},
["fkk"] = {"Kirya-Konzəl"},
["fkv"] = {"Kven Finnish"},
["fla"] = {"Kalispel-Pend d'Oreille"},
["flh"] = {"Foau"},
["fli"] = {"Fali"},
["fll"] = {"North Fali"},
["fln"] = {"Flinders Island"},
["flr"] = {"Fuliiru"},
["fly"] = {"Flaaitaal", "Tsotsitaal"},
["fmp"] = {"Fe'fe'"},
["fmu"] = {"Far Western Muria"},
["fnb"] = {"Fanbak"},
["fng"] = {"Fanagalo"},
["fni"] = {"Fania"},
["fod"] = {"Foodo"},
["foi"] = {"Foi"},
["fom"] = {"Foma"},
["fon"] = {"Fon"},
["for"] = {"Fore"},
["fos"] = {"Siraya"},
["fox"] = {"Formosan languages"},
["fpe"] = {"Fernando Po Creole English"},
["fqs"] = {"Fas"},
["frc"] = {"Cajun French"},
["frd"] = {"Fordata"},
["frk"] = {"Frankish"},
["frm"] = {"Middle French (ca. 1400-1600)"},
["fro"] = {"Old French (842-ca. 1400)"},
["frp"] = {"Arpitan", "Francoprovençal"},
["frq"] = {"Forak"},
["frr"] = {"Northern Frisian"},
["frs"] = {"Eastern Frisian"},
["frt"] = {"Fortsenal"},
["fse"] = {"Finnish Sign Language"},
["fsl"] = {"French Sign Language"},
["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"},
["fub"] = {"Adamawa Fulfulde"},
["fuc"] = {"Pulaar"},
["fud"] = {"East Futuna"},
["fue"] = {"Borgu Fulfulde"},
["fuf"] = {"Pular"},
["fuh"] = {"Western Niger Fulfulde"},
["fui"] = {"Bagirmi Fulfulde"},
["fuj"] = {"Ko"},
["fum"] = {"Fum"},
["fun"] = {"Fulniô"},
["fuq"] = {"Central-Eastern Niger Fulfulde"},
["fur"] = {"Friulian"},
["fut"] = {"Futuna-Aniwa"},
["fuu"] = {"Furu"},
["fuv"] = {"Nigerian Fulfulde"},
["fuy"] = {"Fuyug"},
["fvr"] = {"Fur"},
["fwa"] = {"Fwâi"},
["fwe"] = {"Fwe"},
["gaa"] = {"Ga"},
["gab"] = {"Gabri"},
["gac"] = {"Mixed Great Andamanese"},
["gad"] = {"Gaddang"},
["gae"] = {"Guarequena"},
["gaf"] = {"Gende"},
["gag"] = {"Gagauz"},
["gah"] = {"Alekano"},
["gai"] = {"Borei"},
["gaj"] = {"Gadsup"},
["gak"] = {"Gamkonora"},
["gal"] = {"Galolen"},
["gam"] = {"Kandawo"},
["gan"] = {"Gan Chinese"},
["gao"] = {"Gants"},
["gap"] = {"Gal"},
["gaq"] = {"Gata'"},
["gar"] = {"Galeya"},
["gas"] = {"Adiwasi Garasia"},
["gat"] = {"Kenati"},
["gau"] = {"Mudhili Gadaba"},
["gaw"] = {"Nobonob"},
["gax"] = {"Borana-Arsi-Guji Oromo"},
["gay"] = {"Gayo"},
["gaz"] = {"West Central Oromo"},
["gba"] = {"Gbaya (Central African Republic)"},
["gbb"] = {"Kaytetye"},
["gbd"] = {"Karajarri"},
["gbe"] = {"Niksek"},
["gbf"] = {"Gaikundi"},
["gbg"] = {"Gbanziri"},
["gbh"] = {"Defi Gbe"},
["gbi"] = {"Galela"},
["gbj"] = {"Bodo Gadaba"},
["gbk"] = {"Gaddi"},
["gbl"] = {"Gamit"},
["gbm"] = {"Garhwali"},
["gbn"] = {"Mo'da"},
["gbo"] = {"Northern Grebo"},
["gbp"] = {"Gbaya-Bossangoa"},
["gbq"] = {"Gbaya-Bozoum"},
["gbr"] = {"Gbagyi"},
["gbs"] = {"Gbesi Gbe"},
["gbu"] = {"Gagadu"},
["gbv"] = {"Gbanu"},
["gbw"] = {"Gabi-Gabi"},
["gbx"] = {"Eastern Xwla Gbe"},
["gby"] = {"Gbari"},
["gbz"] = {"Zoroastrian Dari"},
["gcc"] = {"Mali"},
["gcd"] = {"Ganggalida"},
["gce"] = {"Galice"},
["gcf"] = {"Guadeloupean Creole French"},
["gcl"] = {"Grenadian Creole English"},
["gcn"] = {"Gaina"},
["gcr"] = {"Guianese Creole French"},
["gct"] = {"Colonia Tovar German"},
["gda"] = {"Gade Lohar"},
["gdb"] = {"Pottangi Ollar Gadaba"},
["gdc"] = {"Gugu Badhun"},
["gdd"] = {"Gedaged"},
["gde"] = {"Gude"},
["gdf"] = {"Guduf-Gava"},
["gdg"] = {"Ga'dang"},
["gdh"] = {"Gadjerawang", "Gajirrabeng"},
["gdi"] = {"Gundi"},
["gdj"] = {"Gurdjar"},
["gdk"] = {"Gadang"},
["gdl"] = {"Dirasha"},
["gdm"] = {"Laal"},
["gdn"] = {"Umanakaina"},
["gdo"] = {"Ghodoberi"},
["gdq"] = {"Mehri"},
["gdr"] = {"Wipi"},
["gds"] = {"Ghandruk Sign Language"},
["gdt"] = {"Kungardutyi"},
["gdu"] = {"Gudu"},
["gdx"] = {"Godwari"},
["gea"] = {"Geruma"},
["geb"] = {"Kire"},
["gec"] = {"Gboloo Grebo"},
["ged"] = {"Gade"},
["gef"] = {"Gerai"},
["geg"] = {"Gengle"},
["geh"] = {"Hutterite German", "Hutterisch"},
["gei"] = {"Gebe"},
["gej"] = {"Gen"},
["gek"] = {"Ywom"},
["gel"] = {"ut-Ma'in"},
["gem"] = {"Germanic languages"},
["geq"] = {"Geme"},
["ges"] = {"Geser-Gorom"},
["gev"] = {"Eviya"},
["gew"] = {"Gera"},
["gex"] = {"Garre"},
["gey"] = {"Enya"},
["gez"] = {"Geez"},
["gfk"] = {"Patpatar"},
["gft"] = {"Gafat"},
["gga"] = {"Gao"},
["ggb"] = {"Gbii"},
["ggd"] = {"Gugadj"},
["gge"] = {"Gurr-goni"},
["ggg"] = {"Gurgula"},
["ggk"] = {"Kungarakany"},
["ggl"] = {"Ganglau"},
["ggt"] = {"Gitua"},
["ggu"] = {"Gagu", "Gban"},
["ggw"] = {"Gogodala"},
["gha"] = {"Ghadamès"},
["ghc"] = {"Hiberno-Scottish Gaelic"},
["ghe"] = {"Southern Ghale"},
["ghh"] = {"Northern Ghale"},
["ghk"] = {"Geko Karen"},
["ghl"] = {"Ghulfan"},
["ghn"] = {"Ghanongga"},
["gho"] = {"Ghomara"},
["ghr"] = {"Ghera"},
["ghs"] = {"Guhu-Samane"},
["ght"] = {"Kuke", "Kutang Ghale"},
["gia"] = {"Kija"},
["gib"] = {"Gibanawa"},
["gic"] = {"Gail"},
["gid"] = {"Gidar"},
["gie"] = {"Gaɓogbo", "Guébie"},
["gig"] = {"Goaria"},
["gih"] = {"Githabul"},
["gii"] = {"Girirra"},
["gil"] = {"Gilbertese"},
["gim"] = {"Gimi (Eastern Highlands)"},
["gin"] = {"Hinukh"},
["gip"] = {"Gimi (West New Britain)"},
["giq"] = {"Green Gelao"},
["gir"] = {"Red Gelao"},
["gis"] = {"North Giziga"},
["git"] = {"Gitxsan"},
["giu"] = {"Mulao"},
["giw"] = {"White Gelao"},
["gix"] = {"Gilima"},
["giy"] = {"Giyug"},
["giz"] = {"South Giziga"},
["gjk"] = {"Kachi Koli"},
["gjm"] = {"Gunditjmara"},
["gjn"] = {"Gonja"},
["gjr"] = {"Gurindji Kriol"},
["gju"] = {"Gujari"},
["gka"] = {"Guya"},
["gkd"] = {"Magɨ (Madang Province)"},
["gke"] = {"Ndai"},
["gkn"] = {"Gokana"},
["gko"] = {"Kok-Nar"},
["gkp"] = {"Guinea Kpelle"},
["gku"] = {"ǂUngkue"},
["glb"] = {"Belning"},
["glc"] = {"Bon Gula"},
["gld"] = {"Nanai"},
["glh"] = {"Northwest Pashai", "Northwest Pashayi"},
["glj"] = {"Gula Iro"},
["glk"] = {"Gilaki"},
["gll"] = {"Garlali"},
["glo"] = {"Galambu"},
["glr"] = {"Glaro-Twabo"},
["glu"] = {"Gula (Chad)"},
["glw"] = {"Glavda"},
["gly"] = {"Gule"},
["gma"] = {"Gambera"},
["gmb"] = {"Gula'alaa"},
["gmd"] = {"Mághdì"},
["gme"] = {"East Germanic languages"},
["gmg"] = {"Magɨyi"},
["gmh"] = {"Middle High German (ca. 1050-1500)"},
["gml"] = {"Middle Low German"},
["gmm"] = {"Gbaya-Mbodomo"},
["gmn"] = {"Gimnime"},
["gmq"] = {"North Germanic languages"},
["gmr"] = {"Mirning", "Mirniny"},
["gmu"] = {"Gumalu"},
["gmv"] = {"Gamo"},
["gmw"] = {"West Germanic languages"},
["gmx"] = {"Magoma"},
["gmy"] = {"Mycenaean Greek"},
["gmz"] = {"Mgbolizhia"},
["gna"] = {"Kaansa"},
["gnb"] = {"Gangte"},
["gnc"] = {"Guanche"},
["gnd"] = {"Zulgo-Gemzek"},
["gne"] = {"Ganang"},
["gng"] = {"Ngangam"},
["gnh"] = {"Lere"},
["gni"] = {"Gooniyandi"},
["gnj"] = {"Ngen"},
["gnk"] = {"ǁGana"},
["gnl"] = {"Gangulu"},
["gnm"] = {"Ginuman"},
["gnn"] = {"Gumatj"},
["gno"] = {"Northern Gondi"},
["gnq"] = {"Gana"},
["gnr"] = {"Gureng Gureng"},
["gnt"] = {"Guntai"},
["gnu"] = {"Gnau"},
["gnw"] = {"Western Bolivian Guaraní"},
["gnz"] = {"Ganzi"},
["goa"] = {"Guro"},
["gob"] = {"Playero"},
["goc"] = {"Gorakor"},
["god"] = {"Godié"},
["goe"] = {"Gongduk"},
["gof"] = {"Gofa"},
["gog"] = {"Gogo"},
["goh"] = {"Old High German (ca. 750-1050)"},
["goi"] = {"Gobasi"},
["goj"] = {"Gowlan"},
["gok"] = {"Gowli"},
["gol"] = {"Gola"},
["gom"] = {"Goan Konkani"},
["gon"] = {"Gondi"},
["goo"] = {"Gone Dau"},
["gop"] = {"Yeretuar"},
["goq"] = {"Gorap"},
["gor"] = {"Gorontalo"},
["gos"] = {"Gronings"},
["got"] = {"Gothic"},
["gou"] = {"Gavar"},
["gov"] = {"Goo"},
["gow"] = {"Gorowa"},
["gox"] = {"Gobu"},
["goy"] = {"Goundo"},
["goz"] = {"Gozarkhani"},
["gpa"] = {"Gupa-Abawa"},
["gpe"] = {"Ghanaian Pidgin English"},
["gpn"] = {"Taiap"},
["gqa"] = {"Ga'anda"},
["gqi"] = {"Guiqiong"},
["gqn"] = {"Guana (Brazil)"},
["gqr"] = {"Gor"},
["gqu"] = {"Qau"},
["gra"] = {"Rajput Garasia"},
["grb"] = {"Grebo"},
["grc"] = {"Ancient Greek (to 1453)"},
["grd"] = {"Guruntum-Mbaaru"},
["grg"] = {"Madi"},
["grh"] = {"Gbiri-Niragu"},
["gri"] = {"Ghari"},
["grj"] = {"Southern Grebo"},
["grk"] = {"Greek languages"},
["grm"] = {"Kota Marudu Talantang"},
["gro"] = {"Groma"},
["grq"] = {"Gorovu"},
["grr"] = {"Taznatit"},
["grs"] = {"Gresi"},
["grt"] = {"Garo"},
["gru"] = {"Kistane"},
["grv"] = {"Central Grebo"},
["grw"] = {"Gweda"},
["grx"] = {"Guriaso"},
["gry"] = {"Barclayville Grebo"},
["grz"] = {"Guramalum"},
["gse"] = {"Ghanaian Sign Language"},
["gsg"] = {"German Sign Language"},
["gsl"] = {"Gusilay"},
["gsm"] = {"Guatemalan Sign Language"},
["gsn"] = {"Nema", "Gusan"},
["gso"] = {"Southwest Gbaya"},
["gsp"] = {"Wasembo"},
["gss"] = {"Greek Sign Language"},
["gsw"] = {"Swiss German", "Alemannic", "Alsatian"},
["gta"] = {"Guató"},
["gtu"] = {"Aghu-Tharnggala"},
["gua"] = {"Shiki"},
["gub"] = {"Guajajára"},
["guc"] = {"Wayuu"},
["gud"] = {"Yocoboué Dida"},
["gue"] = {"Gurindji"},
["guf"] = {"Gupapuyngu"},
["gug"] = {"Paraguayan Guaraní"},
["guh"] = {"Guahibo"},
["gui"] = {"Eastern Bolivian Guaraní"},
["guk"] = {"Gumuz"},
["gul"] = {"Sea Island Creole English"},
["gum"] = {"Guambiano"},
["gun"] = {"Mbyá Guaraní"},
["guo"] = {"Guayabero"},
["gup"] = {"Gunwinggu"},
["guq"] = {"Aché"},
["gur"] = {"Farefare"},
["gus"] = {"Guinean Sign Language"},
["gut"] = {"Maléku Jaíka"},
["guu"] = {"Yanomamö"},
["guw"] = {"Gun"},
["gux"] = {"Gourmanchéma"},
["guz"] = {"Gusii", "Ekegusii"},
["gva"] = {"Guana (Paraguay)"},
["gvc"] = {"Guanano"},
["gve"] = {"Duwet"},
["gvf"] = {"Golin"},
["gvj"] = {"Guajá"},
["gvl"] = {"Gulay"},
["gvm"] = {"Gurmana"},
["gvn"] = {"Kuku-Yalanji"},
["gvo"] = {"Gavião Do Jiparaná"},
["gvp"] = {"Pará Gavião"},
["gvr"] = {"Gurung"},
["gvs"] = {"Gumawana"},
["gvy"] = {"Guyani"},
["gwa"] = {"Mbato"},
["gwb"] = {"Gwa"},
["gwc"] = {"Gawri", "Kalami"},
["gwd"] = {"Gawwada"},
["gwe"] = {"Gweno"},
["gwf"] = {"Gowro"},
["gwg"] = {"Moo"},
["gwi"] = {"Gwichʼin"},
["gwj"] = {"ǀGwi"},
["gwm"] = {"Awngthim"},
["gwn"] = {"Gwandara"},
["gwr"] = {"Gwere"},
["gwt"] = {"Gawar-Bati"},
["gwu"] = {"Guwamu"},
["gww"] = {"Kwini"},
["gwx"] = {"Gua"},
["gxx"] = {"Wè Southern"},
["gya"] = {"Northwest Gbaya"},
["gyb"] = {"Garus"},
["gyd"] = {"Kayardild"},
["gye"] = {"Gyem"},
["gyf"] = {"Gungabula"},
["gyg"] = {"Gbayi"},
["gyi"] = {"Gyele"},
["gyl"] = {"Gayil"},
["gym"] = {"Ngäbere"},
["gyn"] = {"Guyanese Creole English"},
["gyo"] = {"Gyalsumdo"},
["gyr"] = {"Guarayu"},
["gyy"] = {"Gunya"},
["gyz"] = {"Geji", "Gyaazi"},
["gza"] = {"Ganza"},
["gzi"] = {"Gazi"},
["gzn"] = {"Gane"},
["haa"] = {"Han"},
["hab"] = {"Hanoi Sign Language"},
["hac"] = {"Gurani"},
["had"] = {"Hatam"},
["hae"] = {"Eastern Oromo"},
["haf"] = {"Haiphong Sign Language"},
["hag"] = {"Hanga"},
["hah"] = {"Hahon"},
["hai"] = {"Haida"},
["haj"] = {"Hajong"},
["hak"] = {"Hakka Chinese"},
["hal"] = {"Halang"},
["ham"] = {"Hewa"},
["han"] = {"Hangaza"},
["hao"] = {"Hakö"},
["hap"] = {"Hupla"},
["haq"] = {"Ha"},
["har"] = {"Harari"},
["has"] = {"Haisla"},
["hav"] = {"Havu"},
["haw"] = {"Hawaiian"},
["hax"] = {"Southern Haida"},
["hay"] = {"Haya"},
["haz"] = {"Hazaragi"},
["hba"] = {"Hamba"},
["hbb"] = {"Huba"},
["hbn"] = {"Heiban"},
["hbo"] = {"Ancient Hebrew"},
["hbu"] = {"Habu"},
["hca"] = {"Andaman Creole Hindi"},
["hch"] = {"Huichol"},
["hdn"] = {"Northern Haida"},
["hds"] = {"Honduras Sign Language"},
["hdy"] = {"Hadiyya"},
["hea"] = {"Northern Qiandong Miao"},
["hed"] = {"Herdé"},
["heg"] = {"Helong"},
["heh"] = {"Hehe"},
["hei"] = {"Heiltsuk"},
["hem"] = {"Hemba"},
["hgm"] = {"Haiǁom"},
["hgw"] = {"Haigwai"},
["hhi"] = {"Hoia Hoia"},
["hhr"] = {"Kerak"},
["hhy"] = {"Hoyahoya"},
["hia"] = {"Lamang"},
["hib"] = {"Hibito"},
["hid"] = {"Hidatsa"},
["hif"] = {"Fiji Hindi"},
["hig"] = {"Kamwe"},
["hih"] = {"Pamosu"},
["hii"] = {"Hinduri"},
["hij"] = {"Hijuk"},
["hik"] = {"Seit-Kaitetu"},
["hil"] = {"Hiligaynon"},
["him"] = {"Himachali languages", "Western Pahari languages"},
["hio"] = {"Tsoa"},
["hir"] = {"Himarimã"},
["hit"] = {"Hittite"},
["hiw"] = {"Hiw"},
["hix"] = {"Hixkaryána"},
["hji"] = {"Haji"},
["hka"] = {"Kahe"},
["hke"] = {"Hunde"},
["hkh"] = {"Khah", "Poguli"},
["hkk"] = {"Hunjara-Kaina Ke"},
["hkn"] = {"Mel-Khaonh"},
["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"},
["hla"] = {"Halia"},
["hlb"] = {"Halbi"},
["hld"] = {"Halang Doan"},
["hle"] = {"Hlersu"},
["hlt"] = {"Matu Chin"},
["hlu"] = {"Hieroglyphic Luwian"},
["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"},
["hmb"] = {"Humburi Senni Songhay"},
["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"},
["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"},
["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"},
["hmf"] = {"Hmong Don"},
["hmg"] = {"Southwestern Guiyang Hmong"},
["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"},
["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"},
["hmj"] = {"Ge", "Gejia"},
["hmk"] = {"Maek"},
["hml"] = {"Luopohe Hmong", "Luopohe Miao"},
["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"},
["hmn"] = {"Hmong", "Mong"},
["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"},
["hmq"] = {"Eastern Qiandong Miao"},
["hmr"] = {"Hmar"},
["hms"] = {"Southern Qiandong Miao"},
["hmt"] = {"Hamtai"},
["hmu"] = {"Hamap"},
["hmv"] = {"Hmong Dô"},
["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"},
["hmx"] = {"Hmong-Mien languages"},
["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"},
["hmz"] = {"Hmong Shua", "Sinicized Miao"},
["hna"] = {"Mina (Cameroon)"},
["hnd"] = {"Southern Hindko"},
["hne"] = {"Chhattisgarhi"},
["hng"] = {"Hungu"},
["hnh"] = {"ǁAni"},
["hni"] = {"Hani"},
["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"},
["hnn"] = {"Hanunoo"},
["hno"] = {"Northern Hindko"},
["hns"] = {"Caribbean Hindustani"},
["hnu"] = {"Hung"},
["hoa"] = {"Hoava"},
["hob"] = {"Mari (Madang Province)"},
["hoc"] = {"Ho"},
["hod"] = {"Holma"},
["hoe"] = {"Horom"},
["hoh"] = {"Hobyót"},
["hoi"] = {"Holikachuk"},
["hoj"] = {"Hadothi", "Haroti"},
["hok"] = {"Hokan languages"},
["hol"] = {"Holu"},
["hom"] = {"Homa"},
["hoo"] = {"Holoholo"},
["hop"] = {"Hopi"},
["hor"] = {"Horo"},
["hos"] = {"Ho Chi Minh City Sign Language"},
["hot"] = {"Hote", "Malê"},
["hov"] = {"Hovongan"},
["how"] = {"Honi"},
["hoy"] = {"Holiya"},
["hoz"] = {"Hozo"},
["hpo"] = {"Hpon"},
["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"},
["hra"] = {"Hrangkhol"},
["hrc"] = {"Niwer Mil"},
["hre"] = {"Hre"},
["hrk"] = {"Haruku"},
["hrm"] = {"Horned Miao"},
["hro"] = {"Haroi"},
["hrp"] = {"Nhirrpi"},
["hrt"] = {"Hértevin"},
["hru"] = {"Hruso"},
["hrw"] = {"Warwar Feni"},
["hrx"] = {"Hunsrik"},
["hrz"] = {"Harzani"},
["hsb"] = {"Upper Sorbian"},
["hsh"] = {"Hungarian Sign Language"},
["hsl"] = {"Hausa Sign Language"},
["hsn"] = {"Xiang Chinese"},
["hss"] = {"Harsusi"},
["hti"] = {"Hoti"},
["hto"] = {"Minica Huitoto"},
["hts"] = {"Hadza"},
["htu"] = {"Hitu"},
["htx"] = {"Middle Hittite"},
["hub"] = {"Huambisa"},
["huc"] = {"ǂHua", "ǂʼAmkhoe"},
["hud"] = {"Huaulu"},
["hue"] = {"San Francisco Del Mar Huave"},
["huf"] = {"Humene"},
["hug"] = {"Huachipaeri"},
["huh"] = {"Huilliche"},
["hui"] = {"Huli"},
["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"},
["huk"] = {"Hulung"},
["hul"] = {"Hula"},
["hum"] = {"Hungana"},
["huo"] = {"Hu"},
["hup"] = {"Hupa"},
["huq"] = {"Tsat"},
["hur"] = {"Halkomelem"},
["hus"] = {"Huastec"},
["hut"] = {"Humla"},
["huu"] = {"Murui Huitoto"},
["huv"] = {"San Mateo Del Mar Huave"},
["huw"] = {"Hukumina"},
["hux"] = {"Nüpode Huitoto"},
["huy"] = {"Hulaulá"},
["huz"] = {"Hunzib"},
["hvc"] = {"Haitian Vodoun Culture Language"},
["hve"] = {"San Dionisio Del Mar Huave"},
["hvk"] = {"Haveke"},
["hvn"] = {"Sabu"},
["hvv"] = {"Santa María Del Mar Huave"},
["hwa"] = {"Wané"},
["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"},
["hwo"] = {"Hwana"},
["hya"] = {"Hya"},
["hyw"] = {"Western Armenian"},
["hyx"] = {"Armenian (family)"},
["iai"] = {"Iaai"},
["ian"] = {"Iatmul"},
["iar"] = {"Purari"},
["iba"] = {"Iban"},
["ibb"] = {"Ibibio"},
["ibd"] = {"Iwaidja"},
["ibe"] = {"Akpes"},
["ibg"] = {"Ibanag"},
["ibh"] = {"Bih"},
["ibl"] = {"Ibaloi"},
["ibm"] = {"Agoi"},
["ibn"] = {"Ibino"},
["ibr"] = {"Ibuoro"},
["ibu"] = {"Ibu"},
["iby"] = {"Ibani"},
["ica"] = {"Ede Ica"},
["ich"] = {"Etkywan"},
["icl"] = {"Icelandic Sign Language"},
["icr"] = {"Islander Creole English"},
["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"},
["idb"] = {"Indo-Portuguese"},
["idc"] = {"Idon", "Ajiya"},
["idd"] = {"Ede Idaca"},
["ide"] = {"Idere"},
["idi"] = {"Idi"},
["idr"] = {"Indri"},
["ids"] = {"Idesa"},
["idt"] = {"Idaté"},
["idu"] = {"Idoma"},
["ifa"] = {"Amganad Ifugao"},
["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"},
["ife"] = {"Ifè"},
["iff"] = {"Ifo"},
["ifk"] = {"Tuwali Ifugao"},
["ifm"] = {"Teke-Fuumu"},
["ifu"] = {"Mayoyao Ifugao"},
["ify"] = {"Keley-I Kallahan"},
["igb"] = {"Ebira"},
["ige"] = {"Igede"},
["igg"] = {"Igana"},
["igl"] = {"Igala"},
["igm"] = {"Kanggape"},
["ign"] = {"Ignaciano"},
["igo"] = {"Isebe"},
["igs"] = {"Interglossa"},
["igw"] = {"Igwe"},
["ihb"] = {"Iha Based Pidgin"},
["ihi"] = {"Ihievbe"},
["ihp"] = {"Iha"},
["ihw"] = {"Bidhawal"},
["iin"] = {"Thiin"},
["iir"] = {"Indo-Iranian languages"},
["ijc"] = {"Izon"},
["ije"] = {"Biseni"},
["ijj"] = {"Ede Ije"},
["ijn"] = {"Kalabari"},
["ijo"] = {"Ijo languages"},
["ijs"] = {"Southeast Ijo"},
["ike"] = {"Eastern Canadian Inuktitut"},
["ikh"] = {"Ikhin-Arokho"},
["iki"] = {"Iko"},
["ikk"] = {"Ika"},
["ikl"] = {"Ikulu"},
["iko"] = {"Olulumo-Ikom"},
["ikp"] = {"Ikpeshi"},
["ikr"] = {"Ikaranggal"},
["iks"] = {"Inuit Sign Language"},
["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"},
["ikv"] = {"Iku-Gora-Ankwa"},
["ikw"] = {"Ikwere"},
["ikx"] = {"Ik"},
["ikz"] = {"Ikizu"},
["ila"] = {"Ile Ape"},
["ilb"] = {"Ila"},
["ilg"] = {"Garig-Ilgar"},
["ili"] = {"Ili Turki"},
["ilk"] = {"Ilongot"},
["ilm"] = {"Iranun (Malaysia)"},
["ilo"] = {"Iloko"},
["ilp"] = {"Iranun (Philippines)"},
["ils"] = {"International Sign"},
["ilu"] = {"Ili'uun"},
["ilv"] = {"Ilue"},
["ima"] = {"Mala Malasar"},
["imi"] = {"Anamgura"},
["iml"] = {"Miluk"},
["imn"] = {"Imonda"},
["imo"] = {"Imbongu"},
["imr"] = {"Imroing"},
["ims"] = {"Marsian"},
["imt"] = {"Imotong"},
["imy"] = {"Milyan"},
["inb"] = {"Inga"},
["inc"] = {"Indic languages"},
["ine"] = {"Indo-European languages"},
["ing"] = {"Degexit'an"},
["inh"] = {"Ingush"},
["inj"] = {"Jungle Inga"},
["inl"] = {"Indonesian Sign Language"},
["inm"] = {"Minaean"},
["inn"] = {"Isinai"},
["ino"] = {"Inoke-Yate"},
["inp"] = {"Iñapari"},
["ins"] = {"Indian Sign Language"},
["int"] = {"Intha"},
["inz"] = {"Ineseño"},
["ior"] = {"Inor"},
["iou"] = {"Tuma-Irumu"},
["iow"] = {"Iowa-Oto"},
["ipi"] = {"Ipili"},
["ipo"] = {"Ipiko"},
["iqu"] = {"Iquito"},
["iqw"] = {"Ikwo"},
["ira"] = {"Iranian languages"},
["ire"] = {"Iresim"},
["irh"] = {"Irarutu"},
["iri"] = {"Rigwe", "Irigwe"},
["irk"] = {"Iraqw"},
["irn"] = {"Irántxe"},
["iro"] = {"Iroquoian languages"},
["irr"] = {"Ir"},
["iru"] = {"Irula"},
["irx"] = {"Kamberau"},
["iry"] = {"Iraya"},
["isa"] = {"Isabi"},
["isc"] = {"Isconahua"},
["isd"] = {"Isnag"},
["ise"] = {"Italian Sign Language"},
["isg"] = {"Irish Sign Language"},
["ish"] = {"Esan"},
["isi"] = {"Nkem-Nkum"},
["isk"] = {"Ishkashimi"},
["ism"] = {"Masimasi"},
["isn"] = {"Isanzu"},
["iso"] = {"Isoko"},
["isr"] = {"Israeli Sign Language"},
["ist"] = {"Istriot"},
["isu"] = {"Isu (Menchum Division)"},
["itb"] = {"Binongan Itneg"},
["itc"] = {"Italic languages"},
["itd"] = {"Southern Tidung"},
["ite"] = {"Itene"},
["iti"] = {"Inlaod Itneg"},
["itk"] = {"Judeo-Italian"},
["itl"] = {"Itelmen"},
["itm"] = {"Itu Mbon Uzo"},
["ito"] = {"Itonama"},
["itr"] = {"Iteri"},
["its"] = {"Isekiri"},
["itt"] = {"Maeng Itneg"},
["itv"] = {"Itawit"},
["itw"] = {"Ito"},
["itx"] = {"Itik"},
["ity"] = {"Moyadan Itneg"},
["itz"] = {"Itzá"},
["ium"] = {"Iu Mien"},
["ivb"] = {"Ibatan"},
["ivv"] = {"Ivatan"},
["iwk"] = {"I-Wak"},
["iwm"] = {"Iwam"},
["iwo"] = {"Iwur"},
["iws"] = {"Sepik Iwam"},
["ixc"] = {"Ixcatec"},
["ixl"] = {"Ixil"},
["iya"] = {"Iyayu"},
["iyo"] = {"Mesaka"},
["iyx"] = {"Yaka (Congo)"},
["izh"] = {"Ingrian"},
["izm"] = {"Kizamani"},
["izr"] = {"Izere"},
["izz"] = {"Izii"},
["jaa"] = {"Jamamadí"},
["jab"] = {"Hyam"},
["jac"] = {"Popti'", "Jakalteko"},
["jad"] = {"Jahanka"},
["jae"] = {"Yabem"},
["jaf"] = {"Jara"},
["jah"] = {"Jah Hut"},
["jaj"] = {"Zazao"},
["jak"] = {"Jakun"},
["jal"] = {"Yalahatan"},
["jam"] = {"Jamaican Creole English"},
["jan"] = {"Jandai"},
["jao"] = {"Yanyuwa"},
["jaq"] = {"Yaqay"},
["jas"] = {"New Caledonian Javanese"},
["jat"] = {"Jakati"},
["jau"] = {"Yaur"},
["jax"] = {"Jambi Malay"},
["jay"] = {"Yan-nhangu", "Nhangu"},
["jaz"] = {"Jawe"},
["jbe"] = {"Judeo-Berber"},
["jbi"] = {"Badjiri"},
["jbj"] = {"Arandai"},
["jbk"] = {"Barikewa"},
["jbm"] = {"Bijim"},
["jbn"] = {"Nafusi"},
["jbo"] = {"Lojban"},
["jbr"] = {"Jofotek-Bromnya"},
["jbt"] = {"Jabutí"},
["jbu"] = {"Jukun Takum"},
["jbw"] = {"Yawijibaya"},
["jcs"] = {"Jamaican Country Sign Language"},
["jct"] = {"Krymchak"},
["jda"] = {"Jad"},
["jdg"] = {"Jadgali"},
["jdt"] = {"Judeo-Tat"},
["jeb"] = {"Jebero"},
["jee"] = {"Jerung"},
["jeh"] = {"Jeh"},
["jei"] = {"Yei"},
["jek"] = {"Jeri Kuo"},
["jel"] = {"Yelmek"},
["jen"] = {"Dza"},
["jer"] = {"Jere"},
["jet"] = {"Manem"},
["jeu"] = {"Jonkor Bourmataguil"},
["jgb"] = {"Ngbee"},
["jge"] = {"Judeo-Georgian"},
["jgk"] = {"Gwak"},
["jgo"] = {"Ngomba"},
["jhi"] = {"Jehai"},
["jhs"] = {"Jhankot Sign Language"},
["jia"] = {"Jina"},
["jib"] = {"Jibu"},
["jic"] = {"Tol"},
["jid"] = {"Bu (Kaduna State)"},
["jie"] = {"Jilbe"},
["jig"] = {"Jingulu", "Djingili"},
["jih"] = {"sTodsde", "Shangzhai"},
["jii"] = {"Jiiddu"},
["jil"] = {"Jilim"},
["jim"] = {"Jimi (Cameroon)"},
["jio"] = {"Jiamao"},
["jiq"] = {"Guanyinqiao", "Lavrung"},
["jit"] = {"Jita"},
["jiu"] = {"Youle Jinuo"},
["jiv"] = {"Shuar"},
["jiy"] = {"Buyuan Jinuo"},
["jje"] = {"Jejueo"},
["jjr"] = {"Bankal"},
["jka"] = {"Kaera"},
["jkm"] = {"Mobwa Karen"},
["jko"] = {"Kubo"},
["jkp"] = {"Paku Karen"},
["jkr"] = {"Koro (India)"},
["jks"] = {"Amami Koniya Sign Language"},
["jku"] = {"Labir"},
["jle"] = {"Ngile"},
["jls"] = {"Jamaican Sign Language"},
["jma"] = {"Dima"},
["jmb"] = {"Zumbun"},
["jmc"] = {"Machame"},
["jmd"] = {"Yamdena"},
["jmi"] = {"Jimi (Nigeria)"},
["jml"] = {"Jumli"},
["jmn"] = {"Makuri Naga"},
["jmr"] = {"Kamara"},
["jms"] = {"Mashi (Nigeria)"},
["jmw"] = {"Mouwase"},
["jmx"] = {"Western Juxtlahuaca Mixtec"},
["jna"] = {"Jangshung"},
["jnd"] = {"Jandavra"},
["jng"] = {"Yangman"},
["jni"] = {"Janji"},
["jnj"] = {"Yemsa"},
["jnl"] = {"Rawat"},
["jns"] = {"Jaunsari"},
["job"] = {"Joba"},
["jod"] = {"Wojenaka"},
["jog"] = {"Jogi"},
["jor"] = {"Jorá"},
["jos"] = {"Jordanian Sign Language"},
["jow"] = {"Jowulu"},
["jpa"] = {"Jewish Palestinian Aramaic"},
["jpr"] = {"Judeo-Persian"},
["jpx"] = {"Japanese (family)"},
["jqr"] = {"Jaqaru"},
["jra"] = {"Jarai"},
["jrb"] = {"Judeo-Arabic"},
["jrr"] = {"Jiru"},
["jrt"] = {"Jakattoe"},
["jru"] = {"Japrería"},
["jsl"] = {"Japanese Sign Language"},
["jua"] = {"Júma"},
["jub"] = {"Wannu"},
["juc"] = {"Jurchen"},
["jud"] = {"Worodougou"},
["juh"] = {"Hõne"},
["jui"] = {"Ngadjuri"},
["juk"] = {"Wapan"},
["jul"] = {"Jirel"},
["jum"] = {"Jumjum"},
["jun"] = {"Juang"},
["juo"] = {"Jiba"},
["jup"] = {"Hupdë"},
["jur"] = {"Jurúna"},
["jus"] = {"Jumla Sign Language"},
["jut"] = {"Jutish"},
["juu"] = {"Ju"},
["juw"] = {"Wãpha"},
["juy"] = {"Juray"},
["jvd"] = {"Javindo"},
["jvn"] = {"Caribbean Javanese"},
["jwi"] = {"Jwira-Pepesa"},
["jya"] = {"Jiarong"},
["jye"] = {"Judeo-Yemeni Arabic"},
["jyy"] = {"Jaya"},
["kaa"] = {"Kara-Kalpak", "Karakalpak"},
["kab"] = {"Kabyle"},
["kac"] = {"Kachin", "Jingpho"},
["kad"] = {"Adara"},
["kae"] = {"Ketangalan"},
["kaf"] = {"Katso"},
["kag"] = {"Kajaman"},
["kah"] = {"Kara (Central African Republic)"},
["kai"] = {"Karekare"},
["kaj"] = {"Jju"},
["kak"] = {"Kalanguya", "Kayapa Kallahan"},
["kam"] = {"Kamba (Kenya)"},
["kao"] = {"Xaasongaxango"},
["kap"] = {"Bezhta"},
["kaq"] = {"Capanahua"},
["kar"] = {"Karen languages"},
["kav"] = {"Katukína"},
["kaw"] = {"Kawi"},
["kax"] = {"Kao"},
["kay"] = {"Kamayurá"},
["kba"] = {"Kalarko"},
["kbb"] = {"Kaxuiâna"},
["kbc"] = {"Kadiwéu"},
["kbd"] = {"Kabardian"},
["kbe"] = {"Kanju"},
["kbg"] = {"Khamba"},
["kbh"] = {"Camsá"},
["kbi"] = {"Kaptiau"},
["kbj"] = {"Kari"},
["kbk"] = {"Grass Koiari"},
["kbl"] = {"Kanembu"},
["kbm"] = {"Iwal"},
["kbn"] = {"Kare (Central African Republic)"},
["kbo"] = {"Keliko"},
["kbp"] = {"Kabiyè"},
["kbq"] = {"Kamano"},
["kbr"] = {"Kafa"},
["kbs"] = {"Kande"},
["kbt"] = {"Abadi"},
["kbu"] = {"Kabutra"},
["kbv"] = {"Dera (Indonesia)"},
["kbw"] = {"Kaiep"},
["kbx"] = {"Ap Ma"},
["kby"] = {"Manga Kanuri"},
["kbz"] = {"Duhwa"},
["kca"] = {"Khanty"},
["kcb"] = {"Kawacha"},
["kcc"] = {"Lubila"},
["kcd"] = {"Ngkâlmpw Kanum"},
["kce"] = {"Kaivi"},
["kcf"] = {"Ukaan"},
["kcg"] = {"Tyap"},
["kch"] = {"Vono"},
["kci"] = {"Kamantan"},
["kcj"] = {"Kobiana"},
["kck"] = {"Kalanga"},
["kcl"] = {"Kela (Papua New Guinea)", "Kala"},
["kcm"] = {"Gula (Central African Republic)"},
["kcn"] = {"Nubi"},
["kco"] = {"Kinalakna"},
["kcp"] = {"Kanga"},
["kcq"] = {"Kamo"},
["kcr"] = {"Katla"},
["kcs"] = {"Koenoem"},
["kct"] = {"Kaian"},
["kcu"] = {"Kami (Tanzania)"},
["kcv"] = {"Kete"},
["kcw"] = {"Kabwari"},
["kcx"] = {"Kachama-Ganjule"},
["kcy"] = {"Korandje"},
["kcz"] = {"Konongo"},
["kda"] = {"Worimi"},
["kdc"] = {"Kutu"},
["kdd"] = {"Yankunytjatjara"},
["kde"] = {"Makonde"},
["kdf"] = {"Mamusi"},
["kdg"] = {"Seba"},
["kdh"] = {"Tem"},
["kdi"] = {"Kumam"},
["kdj"] = {"Karamojong"},
["kdk"] = {"Numèè", "Kwényi"},
["kdl"] = {"Tsikimba"},
["kdm"] = {"Kagoma"},
["kdn"] = {"Kunda"},
["kdo"] = {"Kordofanian languages"},
["kdp"] = {"Kaningdon-Nindem"},
["kdq"] = {"Koch"},
["kdr"] = {"Karaim"},
["kdt"] = {"Kuy"},
["kdu"] = {"Kadaru"},
["kdw"] = {"Koneraw"},
["kdx"] = {"Kam"},
["kdy"] = {"Keder", "Keijar"},
["kdz"] = {"Kwaja"},
["kea"] = {"Kabuverdianu"},
["keb"] = {"Kélé"},
["kec"] = {"Keiga"},
["ked"] = {"Kerewe"},
["kee"] = {"Eastern Keres"},
["kef"] = {"Kpessi"},
["keg"] = {"Tese"},
["keh"] = {"Keak"},
["kei"] = {"Kei"},
["kej"] = {"Kadar"},
["kek"] = {"Kekchí"},
["kel"] = {"Kela (Democratic Republic of Congo)"},
["kem"] = {"Kemak"},
["ken"] = {"Kenyang"},
["keo"] = {"Kakwa"},
["kep"] = {"Kaikadi"},
["keq"] = {"Kamar"},
["ker"] = {"Kera"},
["kes"] = {"Kugbo"},
["ket"] = {"Ket"},
["keu"] = {"Akebu"},
["kev"] = {"Kanikkaran"},
["kew"] = {"West Kewa"},
["kex"] = {"Kukna"},
["key"] = {"Kupia"},
["kez"] = {"Kukele"},
["kfa"] = {"Kodava"},
["kfb"] = {"Northwestern Kolami"},
["kfc"] = {"Konda-Dora"},
["kfd"] = {"Korra Koraga"},
["kfe"] = {"Kota (India)"},
["kff"] = {"Koya"},
["kfg"] = {"Kudiya"},
["kfh"] = {"Kurichiya"},
["kfi"] = {"Kannada Kurumba"},
["kfj"] = {"Kemiehua"},
["kfk"] = {"Kinnauri"},
["kfl"] = {"Kung"},
["kfm"] = {"Khunsari"},
["kfn"] = {"Kuk"},
["kfo"] = {"Koro (Côte d'Ivoire)"},
["kfp"] = {"Korwa"},
["kfq"] = {"Korku"},
["kfr"] = {"Kachhi", "Kutchi"},
["kfs"] = {"Bilaspuri"},
["kft"] = {"Kanjari"},
["kfu"] = {"Katkari"},
["kfv"] = {"Kurmukar"},
["kfw"] = {"Kharam Naga"},
["kfx"] = {"Kullu Pahari"},
["kfy"] = {"Kumaoni"},
["kfz"] = {"Koromfé"},
["kga"] = {"Koyaga"},
["kgb"] = {"Kawe"},
["kge"] = {"Komering"},
["kgf"] = {"Kube"},
["kgg"] = {"Kusunda"},
["kgi"] = {"Selangor Sign Language"},
["kgj"] = {"Gamale Kham"},
["kgk"] = {"Kaiwá"},
["kgl"] = {"Kunggari"},
["kgn"] = {"Karingani"},
["kgo"] = {"Krongo"},
["kgp"] = {"Kaingang"},
["kgq"] = {"Kamoro"},
["kgr"] = {"Abun"},
["kgs"] = {"Kumbainggar"},
["kgt"] = {"Somyev"},
["kgu"] = {"Kobol"},
["kgv"] = {"Karas"},
["kgw"] = {"Karon Dori"},
["kgx"] = {"Kamaru"},
["kgy"] = {"Kyerung"},
["kha"] = {"Khasi"},
["khb"] = {"Lü"},
["khc"] = {"Tukang Besi North"},
["khd"] = {"Bädi Kanum"},
["khe"] = {"Korowai"},
["khf"] = {"Khuen"},
["khg"] = {"Khams Tibetan"},
["khh"] = {"Kehu"},
["khi"] = {"Khoisan languages"},
["khj"] = {"Kuturmi"},
["khk"] = {"Halh Mongolian"},
["khl"] = {"Lusi"},
["khn"] = {"Khandesi"},
["kho"] = {"Khotanese", "Sakan"},
["khp"] = {"Kapori", "Kapauri"},
["khq"] = {"Koyra Chiini Songhay"},
["khr"] = {"Kharia"},
["khs"] = {"Kasua"},
["kht"] = {"Khamti"},
["khu"] = {"Nkhumbi"},
["khv"] = {"Khvarshi"},
["khw"] = {"Khowar"},
["khx"] = {"Kanu"},
["khy"] = {"Kele (Democratic Republic of Congo)"},
["khz"] = {"Keapara"},
["kia"] = {"Kim"},
["kib"] = {"Koalib"},
["kic"] = {"Kickapoo"},
["kid"] = {"Koshin"},
["kie"] = {"Kibet"},
["kif"] = {"Eastern Parbate Kham"},
["kig"] = {"Kimaama", "Kimaghima"},
["kih"] = {"Kilmeri"},
["kii"] = {"Kitsai"},
["kij"] = {"Kilivila"},
["kil"] = {"Kariya"},
["kim"] = {"Karagas"},
["kio"] = {"Kiowa"},
["kip"] = {"Sheshi Kham"},
["kiq"] = {"Kosadle", "Kosare"},
["kis"] = {"Kis"},
["kit"] = {"Agob"},
["kiu"] = {"Kirmanjki (individual language)"},
["kiv"] = {"Kimbu"},
["kiw"] = {"Northeast Kiwai"},
["kix"] = {"Khiamniungan Naga"},
["kiy"] = {"Kirikiri"},
["kiz"] = {"Kisi"},
["kja"] = {"Mlap"},
["kjb"] = {"Q'anjob'al", "Kanjobal"},
["kjc"] = {"Coastal Konjo"},
["kjd"] = {"Southern Kiwai"},
["kje"] = {"Kisar"},
["kjg"] = {"Khmu"},
["kjh"] = {"Khakas"},
["kji"] = {"Zabana"},
["kjj"] = {"Khinalugh"},
["kjk"] = {"Highland Konjo"},
["kjl"] = {"Western Parbate Kham"},
["kjm"] = {"Kháng"},
["kjn"] = {"Kunjen"},
["kjo"] = {"Harijan Kinnauri"},
["kjp"] = {"Pwo Eastern Karen"},
["kjq"] = {"Western Keres"},
["kjr"] = {"Kurudu"},
["kjs"] = {"East Kewa"},
["kjt"] = {"Phrae Pwo Karen"},
["kju"] = {"Kashaya"},
["kjv"] = {"Kaikavian Literary Language"},
["kjx"] = {"Ramopa"},
["kjy"] = {"Erave"},
["kjz"] = {"Bumthangkha"},
["kka"] = {"Kakanda"},
["kkb"] = {"Kwerisa"},
["kkc"] = {"Odoodee"},
["kkd"] = {"Kinuku"},
["kke"] = {"Kakabe"},
["kkf"] = {"Kalaktang Monpa"},
["kkg"] = {"Mabaka Valley Kalinga"},
["kkh"] = {"Khün"},
["kki"] = {"Kagulu"},
["kkj"] = {"Kako"},
["kkk"] = {"Kokota"},
["kkl"] = {"Kosarek Yale"},
["kkm"] = {"Kiong"},
["kkn"] = {"Kon Keu"},
["kko"] = {"Karko"},
["kkp"] = {"Gugubera", "Koko-Bera"},
["kkq"] = {"Kaeku"},
["kkr"] = {"Kir-Balar"},
["kks"] = {"Giiwo"},
["kkt"] = {"Koi"},
["kku"] = {"Tumi"},
["kkv"] = {"Kangean"},
["kkw"] = {"Teke-Kukuya"},
["kkx"] = {"Kohin"},
["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"},
["kkz"] = {"Kaska"},
["kla"] = {"Klamath-Modoc"},
["klb"] = {"Kiliwa"},
["klc"] = {"Kolbila"},
["kld"] = {"Gamilaraay"},
["kle"] = {"Kulung (Nepal)"},
["klf"] = {"Kendeje"},
["klg"] = {"Tagakaulo"},
["klh"] = {"Weliki"},
["kli"] = {"Kalumpang"},
["klj"] = {"Khalaj"},
["klk"] = {"Kono (Nigeria)"},
["kll"] = {"Kagan Kalagan"},
["klm"] = {"Migum"},
["kln"] = {"Kalenjin"},
["klo"] = {"Kapya"},
["klp"] = {"Kamasa"},
["klq"] = {"Rumu"},
["klr"] = {"Khaling"},
["kls"] = {"Kalasha"},
["klt"] = {"Nukna"},
["klu"] = {"Klao"},
["klv"] = {"Maskelynes"},
["klw"] = {"Tado", "Lindu"},
["klx"] = {"Koluwawa"},
["kly"] = {"Kalao"},
["klz"] = {"Kabola"},
["kma"] = {"Konni"},
["kmb"] = {"Kimbundu"},
["kmc"] = {"Southern Dong"},
["kmd"] = {"Majukayang Kalinga"},
["kme"] = {"Bakole"},
["kmf"] = {"Kare (Papua New Guinea)"},
["kmg"] = {"Kâte"},
["kmh"] = {"Kalam"},
["kmi"] = {"Kami (Nigeria)"},
["kmj"] = {"Kumarbhag Paharia"},
["kmk"] = {"Limos Kalinga"},
["kml"] = {"Tanudan Kalinga"},
["kmm"] = {"Kom (India)"},
["kmn"] = {"Awtuw"},
["kmo"] = {"Kwoma"},
["kmp"] = {"Gimme"},
["kmq"] = {"Kwama"},
["kmr"] = {"Northern Kurdish"},
["kms"] = {"Kamasau"},
["kmt"] = {"Kemtuik"},
["kmu"] = {"Kanite"},
["kmv"] = {"Karipúna Creole French"},
["kmw"] = {"Komo (Democratic Republic of Congo)"},
["kmx"] = {"Waboda"},
["kmy"] = {"Koma"},
["kmz"] = {"Khorasani Turkish"},
["kna"] = {"Dera (Nigeria)"},
["knb"] = {"Lubuagan Kalinga"},
["knc"] = {"Central Kanuri"},
["knd"] = {"Konda"},
["kne"] = {"Kankanaey"},
["knf"] = {"Mankanya"},
["kng"] = {"Koongo"},
["kni"] = {"Kanufi"},
["knj"] = {"Western Kanjobal"},
["knk"] = {"Kuranko"},
["knl"] = {"Keninjal"},
["knm"] = {"Kanamarí"},
["knn"] = {"Konkani (individual language)"},
["kno"] = {"Kono (Sierra Leone)"},
["knp"] = {"Kwanja"},
["knq"] = {"Kintaq"},
["knr"] = {"Kaningra"},
["kns"] = {"Kensiu"},
["knt"] = {"Panoan Katukína"},
["knu"] = {"Kono (Guinea)"},
["knv"] = {"Tabo"},
["knw"] = {"Kung-Ekoka"},
["knx"] = {"Kendayan", "Salako"},
["kny"] = {"Kanyok"},
["knz"] = {"Kalamsé"},
["koa"] = {"Konomala"},
["koc"] = {"Kpati"},
["kod"] = {"Kodi"},
["koe"] = {"Kacipo-Bale Suri"},
["kof"] = {"Kubi"},
["kog"] = {"Cogui", "Kogi"},
["koh"] = {"Koyo"},
["koi"] = {"Komi-Permyak"},
["kok"] = {"Konkani (macrolanguage)"},
["kol"] = {"Kol (Papua New Guinea)"},
["koo"] = {"Konzo"},
["kop"] = {"Waube"},
["koq"] = {"Kota (Gabon)"},
["kos"] = {"Kosraean"},
["kot"] = {"Lagwan"},
["kou"] = {"Koke"},
["kov"] = {"Kudu-Camo"},
["kow"] = {"Kugama"},
["koy"] = {"Koyukon"},
["koz"] = {"Korak"},
["kpa"] = {"Kutto"},
["kpb"] = {"Mullu Kurumba"},
["kpc"] = {"Curripaco"},
["kpd"] = {"Koba"},
["kpe"] = {"Kpelle"},
["kpf"] = {"Komba"},
["kpg"] = {"Kapingamarangi"},
["kph"] = {"Kplang"},
["kpi"] = {"Kofei"},
["kpj"] = {"Karajá"},
["kpk"] = {"Kpan"},
["kpl"] = {"Kpala"},
["kpm"] = {"Koho"},
["kpn"] = {"Kepkiriwát"},
["kpo"] = {"Ikposo"},
["kpq"] = {"Korupun-Sela"},
["kpr"] = {"Korafe-Yegha"},
["kps"] = {"Tehit"},
["kpt"] = {"Karata"},
["kpu"] = {"Kafoa"},
["kpv"] = {"Komi-Zyrian"},
["kpw"] = {"Kobon"},
["kpx"] = {"Mountain Koiali"},
["kpy"] = {"Koryak"},
["kpz"] = {"Kupsabiny"},
["kqa"] = {"Mum"},
["kqb"] = {"Kovai"},
["kqc"] = {"Doromu-Koki"},
["kqd"] = {"Koy Sanjaq Surat"},
["kqe"] = {"Kalagan"},
["kqf"] = {"Kakabai"},
["kqg"] = {"Khe"},
["kqh"] = {"Kisankasa"},
["kqi"] = {"Koitabu"},
["kqj"] = {"Koromira"},
["kqk"] = {"Kotafon Gbe"},
["kql"] = {"Kyenele"},
["kqm"] = {"Khisa"},
["kqn"] = {"Kaonde"},
["kqo"] = {"Eastern Krahn"},
["kqp"] = {"Kimré"},
["kqq"] = {"Krenak"},
["kqr"] = {"Kimaragang"},
["kqs"] = {"Northern Kissi"},
["kqt"] = {"Klias River Kadazan"},
["kqu"] = {"Seroa"},
["kqv"] = {"Okolod"},
["kqw"] = {"Kandas"},
["kqx"] = {"Mser"},
["kqy"] = {"Koorete"},
["kqz"] = {"Korana"},
["kra"] = {"Kumhali"},
["krb"] = {"Karkin"},
["krc"] = {"Karachay-Balkar"},
["krd"] = {"Kairui-Midiki"},
["kre"] = {"Panará"},
["krf"] = {"Koro (Vanuatu)"},
["krh"] = {"Kurama"},
["kri"] = {"Krio"},
["krj"] = {"Kinaray-A"},
["krk"] = {"Kerek"},
["krl"] = {"Karelian"},
["krn"] = {"Sapo"},
["kro"] = {"Kru languages"},
["krp"] = {"Durop"},
["krr"] = {"Krung"},
["krs"] = {"Gbaya (Sudan)"},
["krt"] = {"Tumari Kanuri"},
["kru"] = {"Kurukh"},
["krv"] = {"Kavet"},
["krw"] = {"Western Krahn"},
["krx"] = {"Karon"},
["kry"] = {"Kryts"},
["krz"] = {"Sota Kanum"},
["ksb"] = {"Shambala"},
["ksc"] = {"Southern Kalinga"},
["ksd"] = {"Kuanua"},
["kse"] = {"Kuni"},
["ksf"] = {"Bafia"},
["ksg"] = {"Kusaghe"},
["ksh"] = {"Kölsch"},
["ksi"] = {"Krisa", "I'saka"},
["ksj"] = {"Uare"},
["ksk"] = {"Kansa"},
["ksl"] = {"Kumalu"},
["ksm"] = {"Kumba"},
["ksn"] = {"Kasiguranin"},
["kso"] = {"Kofa"},
["ksp"] = {"Kaba"},
["ksq"] = {"Kwaami"},
["ksr"] = {"Borong"},
["kss"] = {"Southern Kisi"},
["kst"] = {"Winyé"},
["ksu"] = {"Khamyang"},
["ksv"] = {"Kusu"},
["ksw"] = {"S'gaw Karen"},
["ksx"] = {"Kedang"},
["ksy"] = {"Kharia Thar"},
["ksz"] = {"Kodaku"},
["kta"] = {"Katua"},
["ktb"] = {"Kambaata"},
["ktc"] = {"Kholok"},
["ktd"] = {"Kokata", "Kukatha"},
["kte"] = {"Nubri"},
["ktf"] = {"Kwami"},
["ktg"] = {"Kalkutung"},
["kth"] = {"Karanga"},
["kti"] = {"North Muyu"},
["ktj"] = {"Plapo Krumen"},
["ktk"] = {"Kaniet"},
["ktl"] = {"Koroshi"},
["ktm"] = {"Kurti"},
["ktn"] = {"Karitiâna"},
["kto"] = {"Kuot"},
["ktp"] = {"Kaduo"},
["ktq"] = {"Katabaga"},
["kts"] = {"South Muyu"},
["ktt"] = {"Ketum"},
["ktu"] = {"Kituba (Democratic Republic of Congo)"},
["ktv"] = {"Eastern Katu"},
["ktw"] = {"Kato"},
["ktx"] = {"Kaxararí"},
["kty"] = {"Kango (Bas-Uélé District)"},
["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"},
["kub"] = {"Kutep"},
["kuc"] = {"Kwinsu"},
["kud"] = {"'Auhelawa"},
["kue"] = {"Kuman (Papua New Guinea)"},
["kuf"] = {"Western Katu"},
["kug"] = {"Kupa"},
["kuh"] = {"Kushi"},
["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"},
["kuj"] = {"Kuria"},
["kuk"] = {"Kepo'"},
["kul"] = {"Kulere"},
["kum"] = {"Kumyk"},
["kun"] = {"Kunama"},
["kuo"] = {"Kumukio"},
["kup"] = {"Kunimaipa"},
["kuq"] = {"Karipuna"},
["kus"] = {"Kusaal"},
["kut"] = {"Kutenai"},
["kuu"] = {"Upper Kuskokwim"},
["kuv"] = {"Kur"},
["kuw"] = {"Kpagua"},
["kux"] = {"Kukatja"},
["kuy"] = {"Kuuku-Ya'u"},
["kuz"] = {"Kunza"},
["kva"] = {"Bagvalal"},
["kvb"] = {"Kubu"},
["kvc"] = {"Kove"},
["kvd"] = {"Kui (Indonesia)"},
["kve"] = {"Kalabakan"},
["kvf"] = {"Kabalai"},
["kvg"] = {"Kuni-Boazi"},
["kvh"] = {"Komodo"},
["kvi"] = {"Kwang"},
["kvj"] = {"Psikye"},
["kvk"] = {"Korean Sign Language"},
["kvl"] = {"Kayaw"},
["kvm"] = {"Kendem"},
["kvn"] = {"Border Kuna"},
["kvo"] = {"Dobel"},
["kvp"] = {"Kompane"},
["kvq"] = {"Geba Karen"},
["kvr"] = {"Kerinci"},
["kvt"] = {"Lahta Karen", "Lahta"},
["kvu"] = {"Yinbaw Karen"},
["kvv"] = {"Kola"},
["kvw"] = {"Wersing"},
["kvx"] = {"Parkari Koli"},
["kvy"] = {"Yintale Karen", "Yintale"},
["kvz"] = {"Tsakwambo", "Tsaukambo"},
["kwa"] = {"Dâw"},
["kwb"] = {"Kwa"},
["kwc"] = {"Likwala"},
["kwd"] = {"Kwaio"},
["kwe"] = {"Kwerba"},
["kwf"] = {"Kwara'ae"},
["kwg"] = {"Sara Kaba Deme"},
["kwh"] = {"Kowiai"},
["kwi"] = {"Awa-Cuaiquer"},
["kwj"] = {"Kwanga"},
["kwk"] = {"Kwakiutl"},
["kwl"] = {"Kofyar"},
["kwm"] = {"Kwambi"},
["kwn"] = {"Kwangali"},
["kwo"] = {"Kwomtari"},
["kwp"] = {"Kodia"},
["kwr"] = {"Kwer"},
["kws"] = {"Kwese"},
["kwt"] = {"Kwesten"},
["kwu"] = {"Kwakum"},
["kwv"] = {"Sara Kaba Náà"},
["kww"] = {"Kwinti"},
["kwx"] = {"Khirwar"},
["kwy"] = {"San Salvador Kongo"},
["kwz"] = {"Kwadi"},
["kxa"] = {"Kairiru"},
["kxb"] = {"Krobu"},
["kxc"] = {"Konso", "Khonso"},
["kxd"] = {"Brunei"},
["kxf"] = {"Manumanaw Karen", "Manumanaw"},
["kxh"] = {"Karo (Ethiopia)"},
["kxi"] = {"Keningau Murut"},
["kxj"] = {"Kulfa"},
["kxk"] = {"Zayein Karen"},
["kxm"] = {"Northern Khmer"},
["kxn"] = {"Kanowit-Tanjong Melanau"},
["kxo"] = {"Kanoé"},
["kxp"] = {"Wadiyara Koli"},
["kxq"] = {"Smärky Kanum"},
["kxr"] = {"Koro (Papua New Guinea)"},
["kxs"] = {"Kangjia"},
["kxt"] = {"Koiwat"},
["kxv"] = {"Kuvi"},
["kxw"] = {"Konai"},
["kxx"] = {"Likuba"},
["kxy"] = {"Kayong"},
["kxz"] = {"Kerewo"},
["kya"] = {"Kwaya"},
["kyb"] = {"Butbut Kalinga"},
["kyc"] = {"Kyaka"},
["kyd"] = {"Karey"},
["kye"] = {"Krache"},
["kyf"] = {"Kouya"},
["kyg"] = {"Keyagana"},
["kyh"] = {"Karok"},
["kyi"] = {"Kiput"},
["kyj"] = {"Karao"},
["kyk"] = {"Kamayo"},
["kyl"] = {"Kalapuya"},
["kym"] = {"Kpatili"},
["kyn"] = {"Northern Binukidnon"},
["kyo"] = {"Kelon"},
["kyp"] = {"Kang"},
["kyq"] = {"Kenga"},
["kyr"] = {"Kuruáya"},
["kys"] = {"Baram Kayan"},
["kyt"] = {"Kayagar"},
["kyu"] = {"Western Kayah"},
["kyv"] = {"Kayort"},
["kyw"] = {"Kudmali"},
["kyx"] = {"Rapoisi"},
["kyy"] = {"Kambaira"},
["kyz"] = {"Kayabí"},
["kza"] = {"Western Karaboro"},
["kzb"] = {"Kaibobo"},
["kzc"] = {"Bondoukou Kulango"},
["kzd"] = {"Kadai"},
["kze"] = {"Kosena"},
["kzf"] = {"Da'a Kaili"},
["kzg"] = {"Kikai"},
["kzi"] = {"Kelabit"},
["kzk"] = {"Kazukuru"},
["kzl"] = {"Kayeli"},
["kzm"] = {"Kais"},
["kzn"] = {"Kokola"},
["kzo"] = {"Kaningi"},
["kzp"] = {"Kaidipang"},
["kzq"] = {"Kaike"},
["kzr"] = {"Karang"},
["kzs"] = {"Sugut Dusun"},
["kzu"] = {"Kayupulau"},
["kzv"] = {"Komyandaret"},
["kzw"] = {"Karirí-Xocó"},
["kzx"] = {"Kamarian"},
["kzy"] = {"Kango (Tshopo District)"},
["kzz"] = {"Kalabra"},
["laa"] = {"Southern Subanen"},
["lab"] = {"Linear A"},
["lac"] = {"Lacandon"},
["lad"] = {"Ladino"},
["lae"] = {"Pattani"},
["laf"] = {"Lafofa"},
["lag"] = {"Rangi"},
["lah"] = {"Lahnda"},
["lai"] = {"Lambya"},
["laj"] = {"Lango (Uganda)"},
["lal"] = {"Lalia"},
["lam"] = {"Lamba"},
["lan"] = {"Laru"},
["lap"] = {"Laka (Chad)"},
["laq"] = {"Qabiao"},
["lar"] = {"Larteh"},
["las"] = {"Lama (Togo)"},
["lau"] = {"Laba"},
["law"] = {"Lauje"},
["lax"] = {"Tiwa"},
["lay"] = {"Lama Bai"},
["laz"] = {"Aribwatsa"},
["lbb"] = {"Label"},
["lbc"] = {"Lakkia"},
["lbe"] = {"Lak"},
["lbf"] = {"Tinani"},
["lbg"] = {"Laopang"},
["lbi"] = {"La'bi"},
["lbj"] = {"Ladakhi"},
["lbk"] = {"Central Bontok"},
["lbl"] = {"Libon Bikol"},
["lbm"] = {"Lodhi"},
["lbn"] = {"Rmeet"},
["lbo"] = {"Laven"},
["lbq"] = {"Wampar"},
["lbr"] = {"Lohorung"},
["lbs"] = {"Libyan Sign Language"},
["lbt"] = {"Lachi"},
["lbu"] = {"Labu"},
["lbv"] = {"Lavatbura-Lamusong"},
["lbw"] = {"Tolaki"},
["lbx"] = {"Lawangan"},
["lby"] = {"Lamalama", "Lamu-Lamu"},
["lbz"] = {"Lardil"},
["lcc"] = {"Legenyem"},
["lcd"] = {"Lola"},
["lce"] = {"Loncong", "Sekak"},
["lcf"] = {"Lubu"},
["lch"] = {"Luchazi"},
["lcl"] = {"Lisela"},
["lcm"] = {"Tungag"},
["lcp"] = {"Western Lawa"},
["lcq"] = {"Luhu"},
["lcs"] = {"Lisabata-Nuniali"},
["lda"] = {"Kla-Dan"},
["ldb"] = {"Dũya"},
["ldd"] = {"Luri"},
["ldg"] = {"Lenyima"},
["ldh"] = {"Lamja-Dengsa-Tola"},
["ldi"] = {"Laari"},
["ldj"] = {"Lemoro"},
["ldk"] = {"Leelau"},
["ldl"] = {"Kaan"},
["ldm"] = {"Landoma"},
["ldn"] = {"Láadan"},
["ldo"] = {"Loo"},
["ldp"] = {"Tso"},
["ldq"] = {"Lufu"},
["lea"] = {"Lega-Shabunda"},
["leb"] = {"Lala-Bisa"},
["lec"] = {"Leco"},
["led"] = {"Lendu"},
["lee"] = {"Lyélé"},
["lef"] = {"Lelemi"},
["leh"] = {"Lenje"},
["lei"] = {"Lemio"},
["lej"] = {"Lengola"},
["lek"] = {"Leipon"},
["lel"] = {"Lele (Democratic Republic of Congo)"},
["lem"] = {"Nomaande"},
["len"] = {"Lenca"},
["leo"] = {"Leti (Cameroon)"},
["lep"] = {"Lepcha"},
["leq"] = {"Lembena"},
["ler"] = {"Lenkau"},
["les"] = {"Lese"},
["let"] = {"Lesing-Gelimi", "Amio-Gelimi"},
["leu"] = {"Kara (Papua New Guinea)"},
["lev"] = {"Lamma"},
["lew"] = {"Ledo Kaili"},
["lex"] = {"Luang"},
["ley"] = {"Lemolang"},
["lez"] = {"Lezghian"},
["lfa"] = {"Lefa"},
["lfn"] = {"Lingua Franca Nova"},
["lga"] = {"Lungga"},
["lgb"] = {"Laghu"},
["lgg"] = {"Lugbara"},
["lgh"] = {"Laghuu"},
["lgi"] = {"Lengilu"},
["lgk"] = {"Lingarak", "Neverver"},
["lgl"] = {"Wala"},
["lgm"] = {"Lega-Mwenga"},
["lgn"] = {"T'apo", "Opuuo"},
["lgo"] = {"Lango (South Sudan)"},
["lgq"] = {"Logba"},
["lgr"] = {"Lengo"},
["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"},
["lgt"] = {"Pahi"},
["lgu"] = {"Longgu"},
["lgz"] = {"Ligenza"},
["lha"] = {"Laha (Viet Nam)"},
["lhh"] = {"Laha (Indonesia)"},
["lhi"] = {"Lahu Shi"},
["lhl"] = {"Lahul Lohar"},
["lhm"] = {"Lhomi"},
["lhn"] = {"Lahanan"},
["lhp"] = {"Lhokpu"},
["lhs"] = {"Mlahsö"},
["lht"] = {"Lo-Toga"},
["lhu"] = {"Lahu"},
["lia"] = {"West-Central Limba"},
["lib"] = {"Likum"},
["lic"] = {"Hlai"},
["lid"] = {"Nyindrou"},
["lie"] = {"Likila"},
["lif"] = {"Limbu"},
["lig"] = {"Ligbi"},
["lih"] = {"Lihir"},
["lij"] = {"Ligurian"},
["lik"] = {"Lika"},
["lil"] = {"Lillooet"},
["lio"] = {"Liki"},
["lip"] = {"Sekpele"},
["liq"] = {"Libido"},
["lir"] = {"Liberian English"},
["lis"] = {"Lisu"},
["liu"] = {"Logorik"},
["liv"] = {"Liv"},
["liw"] = {"Col"},
["lix"] = {"Liabuku"},
["liy"] = {"Banda-Bambari"},
["liz"] = {"Libinza"},
["lja"] = {"Golpa"},
["lje"] = {"Rampi"},
["lji"] = {"Laiyolo"},
["ljl"] = {"Li'o"},
["ljp"] = {"Lampung Api"},
["ljw"] = {"Yirandali"},
["ljx"] = {"Yuru"},
["lka"] = {"Lakalei"},
["lkb"] = {"Kabras", "Lukabaras"},
["lkc"] = {"Kucong"},
["lkd"] = {"Lakondê"},
["lke"] = {"Kenyi"},
["lkh"] = {"Lakha"},
["lki"] = {"Laki"},
["lkj"] = {"Remun"},
["lkl"] = {"Laeko-Libuat"},
["lkm"] = {"Kalaamaya"},
["lkn"] = {"Lakon", "Vure"},
["lko"] = {"Khayo", "Olukhayo"},
["lkr"] = {"Päri"},
["lks"] = {"Kisa", "Olushisa"},
["lkt"] = {"Lakota"},
["lku"] = {"Kungkari"},
["lky"] = {"Lokoya"},
["lla"] = {"Lala-Roba"},
["llb"] = {"Lolo"},
["llc"] = {"Lele (Guinea)"},
["lld"] = {"Ladin"},
["lle"] = {"Lele (Papua New Guinea)"},
["llf"] = {"Hermit"},
["llg"] = {"Lole"},
["llh"] = {"Lamu"},
["lli"] = {"Teke-Laali"},
["llj"] = {"Ladji Ladji"},
["llk"] = {"Lelak"},
["lll"] = {"Lilau"},
["llm"] = {"Lasalimu"},
["lln"] = {"Lele (Chad)"},
["llp"] = {"North Efate"},
["llq"] = {"Lolak"},
["lls"] = {"Lithuanian Sign Language"},
["llu"] = {"Lau"},
["llx"] = {"Lauan"},
["lma"] = {"East Limba"},
["lmb"] = {"Merei"},
["lmc"] = {"Limilngan"},
["lmd"] = {"Lumun"},
["lme"] = {"Pévé"},
["lmf"] = {"South Lembata"},
["lmg"] = {"Lamogai"},
["lmh"] = {"Lambichhong"},
["lmi"] = {"Lombi"},
["lmj"] = {"West Lembata"},
["lmk"] = {"Lamkang"},
["lml"] = {"Hano"},
["lmn"] = {"Lambadi"},
["lmo"] = {"Lombard"},
["lmp"] = {"Limbum"},
["lmq"] = {"Lamatuka"},
["lmr"] = {"Lamalera"},
["lmu"] = {"Lamenu"},
["lmv"] = {"Lomaiviti"},
["lmw"] = {"Lake Miwok"},
["lmx"] = {"Laimbue"},
["lmy"] = {"Lamboya"},
["lna"] = {"Langbashe"},
["lnb"] = {"Mbalanhu"},
["lnd"] = {"Lundayeh", "Lun Bawang"},
["lng"] = {"Langobardic"},
["lnh"] = {"Lanoh"},
["lni"] = {"Daantanai'"},
["lnj"] = {"Leningitij"},
["lnl"] = {"South Central Banda"},
["lnm"] = {"Langam"},
["lnn"] = {"Lorediakarkar"},
["lns"] = {"Lamnso'"},
["lnu"] = {"Longuda"},
["lnw"] = {"Lanima"},
["lnz"] = {"Lonzo"},
["loa"] = {"Loloda"},
["lob"] = {"Lobi"},
["loc"] = {"Inonhan"},
["loe"] = {"Saluan"},
["lof"] = {"Logol"},
["log"] = {"Logo"},
["loh"] = {"Laarim", "Narim"},
["loi"] = {"Loma (Côte d'Ivoire)"},
["loj"] = {"Lou"},
["lok"] = {"Loko"},
["lol"] = {"Mongo"},
["lom"] = {"Loma (Liberia)"},
["lon"] = {"Malawi Lomwe"},
["loo"] = {"Lombo"},
["lop"] = {"Lopa"},
["loq"] = {"Lobala"},
["lor"] = {"Téén"},
["los"] = {"Loniu"},
["lot"] = {"Otuho"},
["lou"] = {"Louisiana Creole"},
["lov"] = {"Lopi"},
["low"] = {"Tampias Lobu"},
["lox"] = {"Loun"},
["loy"] = {"Loke"},
["loz"] = {"Lozi"},
["lpa"] = {"Lelepa"},
["lpe"] = {"Lepki"},
["lpn"] = {"Long Phuri Naga"},
["lpo"] = {"Lipo"},
["lpx"] = {"Lopit"},
["lqr"] = {"Logir"},
["lra"] = {"Rara Bakati'"},
["lrc"] = {"Northern Luri"},
["lre"] = {"Laurentian"},
["lrg"] = {"Laragia"},
["lri"] = {"Marachi", "Olumarachi"},
["lrk"] = {"Loarki"},
["lrl"] = {"Lari"},
["lrm"] = {"Marama", "Olumarama"},
["lrn"] = {"Lorang"},
["lro"] = {"Laro"},
["lrr"] = {"Southern Yamphu"},
["lrt"] = {"Larantuka Malay"},
["lrv"] = {"Larevat"},
["lrz"] = {"Lemerig"},
["lsa"] = {"Lasgerdi"},
["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"},
["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"},
["lsd"] = {"Lishana Deni"},
["lse"] = {"Lusengo"},
["lsh"] = {"Lish"},
["lsi"] = {"Lashi"},
["lsl"] = {"Latvian Sign Language"},
["lsm"] = {"Saamia", "Olusamia"},
["lsn"] = {"Tibetan Sign Language"},
["lso"] = {"Laos Sign Language"},
["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"},
["lsr"] = {"Aruop"},
["lss"] = {"Lasi"},
["lst"] = {"Trinidad and Tobago Sign Language"},
["lsv"] = {"Sivia Sign Language"},
["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"},
["lsy"] = {"Mauritian Sign Language"},
["ltc"] = {"Late Middle Chinese"},
["ltg"] = {"Latgalian"},
["lth"] = {"Thur"},
["lti"] = {"Leti (Indonesia)"},
["ltn"] = {"Latundê"},
["lto"] = {"Tsotso", "Olutsotso"},
["lts"] = {"Tachoni", "Lutachoni"},
["ltu"] = {"Latu"},
["lua"] = {"Luba-Lulua"},
["luc"] = {"Aringa"},
["lud"] = {"Ludian"},
["lue"] = {"Luvale"},
["luf"] = {"Laua"},
["lui"] = {"Luiseno"},
["luj"] = {"Luna"},
["luk"] = {"Lunanakha"},
["lul"] = {"Olu'bo"},
["lum"] = {"Luimbi"},
["lun"] = {"Lunda"},
["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"},
["lup"] = {"Lumbu"},
["luq"] = {"Lucumi"},
["lur"] = {"Laura"},
["lus"] = {"Lushai"},
["lut"] = {"Lushootseed"},
["luu"] = {"Lumba-Yakkha"},
["luv"] = {"Luwati"},
["luw"] = {"Luo (Cameroon)"},
["luy"] = {"Luyia", "Oluluyia"},
["luz"] = {"Southern Luri"},
["lva"] = {"Maku'a"},
["lvi"] = {"Lavi"},
["lvk"] = {"Lavukaleve"},
["lvl"] = {"Lwel"},
["lvs"] = {"Standard Latvian"},
["lvu"] = {"Levuka"},
["lwa"] = {"Lwalu"},
["lwe"] = {"Lewo Eleng"},
["lwg"] = {"Wanga", "Oluwanga"},
["lwh"] = {"White Lachi"},
["lwl"] = {"Eastern Lawa"},
["lwm"] = {"Laomian"},
["lwo"] = {"Luwo"},
["lws"] = {"Malawian Sign Language"},
["lwt"] = {"Lewotobi"},
["lwu"] = {"Lawu"},
["lww"] = {"Lewo"},
["lxm"] = {"Lakurumau"},
["lya"] = {"Layakha"},
["lyg"] = {"Lyngngam"},
["lyn"] = {"Luyana"},
["lzh"] = {"Literary Chinese"},
["lzl"] = {"Litzlitz"},
["lzn"] = {"Leinong Naga"},
["lzz"] = {"Laz"},
["maa"] = {"San Jerónimo Tecóatl Mazatec"},
["mab"] = {"Yutanduchi Mixtec"},
["mad"] = {"Madurese"},
["mae"] = {"Bo-Rukul"},
["maf"] = {"Mafa"},
["mag"] = {"Magahi"},
["mai"] = {"Maithili"},
["maj"] = {"Jalapa De Díaz Mazatec"},
["mak"] = {"Makasar"},
["mam"] = {"Mam"},
["man"] = {"Mandingo", "Manding"},
["map"] = {"Austronesian languages"},
["maq"] = {"Chiquihuitlán Mazatec"},
["mas"] = {"Masai"},
["mat"] = {"San Francisco Matlatzinca"},
["mau"] = {"Huautla Mazatec"},
["mav"] = {"Sateré-Mawé"},
["maw"] = {"Mampruli"},
["max"] = {"North Moluccan Malay"},
["maz"] = {"Central Mazahua"},
["mba"] = {"Higaonon"},
["mbb"] = {"Western Bukidnon Manobo"},
["mbc"] = {"Macushi"},
["mbd"] = {"Dibabawon Manobo"},
["mbe"] = {"Molale"},
["mbf"] = {"Baba Malay"},
["mbh"] = {"Mangseng"},
["mbi"] = {"Ilianen Manobo"},
["mbj"] = {"Nadëb"},
["mbk"] = {"Malol"},
["mbl"] = {"Maxakalí"},
["mbm"] = {"Ombamba"},
["mbn"] = {"Macaguán"},
["mbo"] = {"Mbo (Cameroon)"},
["mbp"] = {"Malayo"},
["mbq"] = {"Maisin"},
["mbr"] = {"Nukak Makú"},
["mbs"] = {"Sarangani Manobo"},
["mbt"] = {"Matigsalug Manobo"},
["mbu"] = {"Mbula-Bwazza"},
["mbv"] = {"Mbulungish"},
["mbw"] = {"Maring"},
["mbx"] = {"Mari (East Sepik Province)"},
["mby"] = {"Memoni"},
["mbz"] = {"Amoltepec Mixtec"},
["mca"] = {"Maca"},
["mcb"] = {"Machiguenga"},
["mcc"] = {"Bitur"},
["mcd"] = {"Sharanahua"},
["mce"] = {"Itundujia Mixtec"},
["mcf"] = {"Matsés"},
["mcg"] = {"Mapoyo"},
["mch"] = {"Maquiritari"},
["mci"] = {"Mese"},
["mcj"] = {"Mvanip"},
["mck"] = {"Mbunda"},
["mcl"] = {"Macaguaje"},
["mcm"] = {"Malaccan Creole Portuguese"},
["mcn"] = {"Masana"},
["mco"] = {"Coatlán Mixe"},
["mcp"] = {"Makaa"},
["mcq"] = {"Ese"},
["mcr"] = {"Menya"},
["mcs"] = {"Mambai"},
["mct"] = {"Mengisa"},
["mcu"] = {"Cameroon Mambila"},
["mcv"] = {"Minanibai"},
["mcw"] = {"Mawa (Chad)"},
["mcx"] = {"Mpiemo"},
["mcy"] = {"South Watut"},
["mcz"] = {"Mawan"},
["mda"] = {"Mada (Nigeria)"},
["mdb"] = {"Morigi"},
["mdc"] = {"Male (Papua New Guinea)"},
["mdd"] = {"Mbum"},
["mde"] = {"Maba (Chad)"},
["mdf"] = {"Moksha"},
["mdg"] = {"Massalat"},
["mdh"] = {"Maguindanaon"},
["mdi"] = {"Mamvu"},
["mdj"] = {"Mangbetu"},
["mdk"] = {"Mangbutu"},
["mdl"] = {"Maltese Sign Language"},
["mdm"] = {"Mayogo"},
["mdn"] = {"Mbati"},
["mdp"] = {"Mbala"},
["mdq"] = {"Mbole"},
["mdr"] = {"Mandar"},
["mds"] = {"Maria (Papua New Guinea)"},
["mdt"] = {"Mbere"},
["mdu"] = {"Mboko"},
["mdv"] = {"Santa Lucía Monteverde Mixtec"},
["mdw"] = {"Mbosi"},
["mdx"] = {"Dizin"},
["mdy"] = {"Male (Ethiopia)"},
["mdz"] = {"Suruí Do Pará"},
["mea"] = {"Menka"},
["meb"] = {"Ikobi"},
["mec"] = {"Marra"},
["med"] = {"Melpa"},
["mee"] = {"Mengen"},
["mef"] = {"Megam"},
["meh"] = {"Southwestern Tlaxiaco Mixtec"},
["mei"] = {"Midob"},
["mej"] = {"Meyah"},
["mek"] = {"Mekeo"},
["mel"] = {"Central Melanau"},
["mem"] = {"Mangala"},
["men"] = {"Mende (Sierra Leone)"},
["meo"] = {"Kedah Malay"},
["mep"] = {"Miriwoong"},
["meq"] = {"Merey"},
["mer"] = {"Meru"},
["mes"] = {"Masmaje"},
["met"] = {"Mato"},
["meu"] = {"Motu"},
["mev"] = {"Mano"},
["mew"] = {"Maaka"},
["mey"] = {"Hassaniyya"},
["mez"] = {"Menominee"},
["mfa"] = {"Pattani Malay"},
["mfb"] = {"Bangka"},
["mfc"] = {"Mba"},
["mfd"] = {"Mendankwe-Nkwen"},
["mfe"] = {"Morisyen"},
["mff"] = {"Naki"},
["mfg"] = {"Mogofin"},
["mfh"] = {"Matal"},
["mfi"] = {"Wandala"},
["mfj"] = {"Mefele"},
["mfk"] = {"North Mofu"},
["mfl"] = {"Putai"},
["mfm"] = {"Marghi South"},
["mfn"] = {"Cross River Mbembe"},
["mfo"] = {"Mbe"},
["mfp"] = {"Makassar Malay"},
["mfq"] = {"Moba"},
["mfr"] = {"Marrithiyel"},
["mfs"] = {"Mexican Sign Language"},
["mft"] = {"Mokerang"},
["mfu"] = {"Mbwela"},
["mfv"] = {"Mandjak"},
["mfw"] = {"Mulaha"},
["mfx"] = {"Melo"},
["mfy"] = {"Mayo"},
["mfz"] = {"Mabaan"},
["mga"] = {"Middle Irish (900-1200)"},
["mgb"] = {"Mararit"},
["mgc"] = {"Morokodo"},
["mgd"] = {"Moru"},
["mge"] = {"Mango"},
["mgf"] = {"Maklew"},
["mgg"] = {"Mpumpong"},
["mgh"] = {"Makhuwa-Meetto"},
["mgi"] = {"Lijili"},
["mgj"] = {"Abureni"},
["mgk"] = {"Mawes"},
["mgl"] = {"Maleu-Kilenge"},
["mgm"] = {"Mambae"},
["mgn"] = {"Mbangi"},
["mgo"] = {"Meta'"},
["mgp"] = {"Eastern Magar"},
["mgq"] = {"Malila"},
["mgr"] = {"Mambwe-Lungu"},
["mgs"] = {"Manda (Tanzania)"},
["mgt"] = {"Mongol"},
["mgu"] = {"Mailu"},
["mgv"] = {"Matengo"},
["mgw"] = {"Matumbi"},
["mgy"] = {"Mbunga"},
["mgz"] = {"Mbugwe"},
["mha"] = {"Manda (India)"},
["mhb"] = {"Mahongwe"},
["mhc"] = {"Mocho"},
["mhd"] = {"Mbugu"},
["mhe"] = {"Besisi", "Mah Meri"},
["mhf"] = {"Mamaa"},
["mhg"] = {"Margu"},
["mhi"] = {"Ma'di"},
["mhj"] = {"Mogholi"},
["mhk"] = {"Mungaka"},
["mhl"] = {"Mauwake"},
["mhm"] = {"Makhuwa-Moniga"},
["mhn"] = {"Mócheno"},
["mho"] = {"Mashi (Zambia)"},
["mhp"] = {"Balinese Malay"},
["mhq"] = {"Mandan"},
["mhr"] = {"Eastern Mari"},
["mhs"] = {"Buru (Indonesia)"},
["mht"] = {"Mandahuaca"},
["mhu"] = {"Digaro-Mishmi", "Darang Deng"},
["mhw"] = {"Mbukushu"},
["mhx"] = {"Maru", "Lhaovo"},
["mhy"] = {"Ma'anyan"},
["mhz"] = {"Mor (Mor Islands)"},
["mia"] = {"Miami"},
["mib"] = {"Atatláhuca Mixtec"},
["mic"] = {"Mi'kmaq", "Micmac"},
["mid"] = {"Mandaic"},
["mie"] = {"Ocotepec Mixtec"},
["mif"] = {"Mofu-Gudur"},
["mig"] = {"San Miguel El Grande Mixtec"},
["mih"] = {"Chayuco Mixtec"},
["mii"] = {"Chigmecatitlán Mixtec"},
["mij"] = {"Abar", "Mungbam"},
["mik"] = {"Mikasuki"},
["mil"] = {"Peñoles Mixtec"},
["mim"] = {"Alacatlatzala Mixtec"},
["min"] = {"Minangkabau"},
["mio"] = {"Pinotepa Nacional Mixtec"},
["mip"] = {"Apasco-Apoala Mixtec"},
["miq"] = {"Mískito"},
["mir"] = {"Isthmus Mixe"},
["mis"] = {"Uncoded languages"},
["mit"] = {"Southern Puebla Mixtec"},
["miu"] = {"Cacaloxtepec Mixtec"},
["miw"] = {"Akoye"},
["mix"] = {"Mixtepec Mixtec"},
["miy"] = {"Ayutla Mixtec"},
["miz"] = {"Coatzospan Mixtec"},
["mjb"] = {"Makalero"},
["mjc"] = {"San Juan Colorado Mixtec"},
["mjd"] = {"Northwest Maidu"},
["mje"] = {"Muskum"},
["mjg"] = {"Tu"},
["mjh"] = {"Mwera (Nyasa)"},
["mji"] = {"Kim Mun"},
["mjj"] = {"Mawak"},
["mjk"] = {"Matukar"},
["mjl"] = {"Mandeali"},
["mjm"] = {"Medebur"},
["mjn"] = {"Ma (Papua New Guinea)"},
["mjo"] = {"Malankuravan"},
["mjp"] = {"Malapandaram"},
["mjq"] = {"Malaryan"},
["mjr"] = {"Malavedan"},
["mjs"] = {"Miship"},
["mjt"] = {"Sauria Paharia"},
["mju"] = {"Manna-Dora"},
["mjv"] = {"Mannan"},
["mjw"] = {"Karbi"},
["mjx"] = {"Mahali"},
["mjy"] = {"Mahican"},
["mjz"] = {"Majhi"},
["mka"] = {"Mbre"},
["mkb"] = {"Mal Paharia"},
["mkc"] = {"Siliput"},
["mke"] = {"Mawchi"},
["mkf"] = {"Miya"},
["mkg"] = {"Mak (China)"},
["mkh"] = {"Mon-Khmer languages"},
["mki"] = {"Dhatki"},
["mkj"] = {"Mokilese"},
["mkk"] = {"Byep"},
["mkl"] = {"Mokole"},
["mkm"] = {"Moklen"},
["mkn"] = {"Kupang Malay"},
["mko"] = {"Mingang Doso"},
["mkp"] = {"Moikodi"},
["mkq"] = {"Bay Miwok"},
["mkr"] = {"Malas"},
["mks"] = {"Silacayoapan Mixtec"},
["mkt"] = {"Vamale"},
["mku"] = {"Konyanka Maninka"},
["mkv"] = {"Mafea"},
["mkw"] = {"Kituba (Congo)"},
["mkx"] = {"Kinamiging Manobo"},
["mky"] = {"East Makian"},
["mkz"] = {"Makasae"},
["mla"] = {"Malo"},
["mlb"] = {"Mbule"},
["mlc"] = {"Cao Lan"},
["mle"] = {"Manambu"},
["mlf"] = {"Mal"},
["mlh"] = {"Mape"},
["mli"] = {"Malimpung"},
["mlj"] = {"Miltu"},
["mlk"] = {"Ilwana", "Kiwilwana"},
["mll"] = {"Malua Bay"},
["mlm"] = {"Mulam"},
["mln"] = {"Malango"},
["mlo"] = {"Mlomp"},
["mlp"] = {"Bargam"},
["mlq"] = {"Western Maninkakan"},
["mlr"] = {"Vame"},
["mls"] = {"Masalit"},
["mlu"] = {"To'abaita"},
["mlv"] = {"Motlav", "Mwotlap"},
["mlw"] = {"Moloko"},
["mlx"] = {"Malfaxal", "Naha'ai"},
["mlz"] = {"Malaynon"},
["mma"] = {"Mama"},
["mmb"] = {"Momina"},
["mmc"] = {"Michoacán Mazahua"},
["mmd"] = {"Maonan"},
["mme"] = {"Mae"},
["mmf"] = {"Mundat"},
["mmg"] = {"North Ambrym"},
["mmh"] = {"Mehináku"},
["mmi"] = {"Musar"},
["mmj"] = {"Majhwar"},
["mmk"] = {"Mukha-Dora"},
["mml"] = {"Man Met"},
["mmm"] = {"Maii"},
["mmn"] = {"Mamanwa"},
["mmo"] = {"Mangga Buang"},
["mmp"] = {"Siawi"},
["mmq"] = {"Musak"},
["mmr"] = {"Western Xiangxi Miao"},
["mmt"] = {"Malalamai"},
["mmu"] = {"Mmaala"},
["mmv"] = {"Miriti"},
["mmw"] = {"Emae"},
["mmx"] = {"Madak"},
["mmy"] = {"Migaama"},
["mmz"] = {"Mabaale"},
["mna"] = {"Mbula"},
["mnb"] = {"Muna"},
["mnc"] = {"Manchu"},
["mnd"] = {"Mondé"},
["mne"] = {"Naba"},
["mnf"] = {"Mundani"},
["mng"] = {"Eastern Mnong"},
["mnh"] = {"Mono (Democratic Republic of Congo)"},
["mni"] = {"Manipuri"},
["mnj"] = {"Munji"},
["mnk"] = {"Mandinka"},
["mnl"] = {"Tiale"},
["mnm"] = {"Mapena"},
["mnn"] = {"Southern Mnong"},
["mno"] = {"Manobo languages"},
["mnp"] = {"Min Bei Chinese"},
["mnq"] = {"Minriq"},
["mnr"] = {"Mono (USA)"},
["mns"] = {"Mansi"},
["mnu"] = {"Mer"},
["mnv"] = {"Rennell-Bellona"},
["mnw"] = {"Mon"},
["mnx"] = {"Manikion"},
["mny"] = {"Manyawa"},
["mnz"] = {"Moni"},
["moa"] = {"Mwan"},
["moc"] = {"Mocoví"},
["mod"] = {"Mobilian"},
["moe"] = {"Innu", "Montagnais"},
["mog"] = {"Mongondow"},
["moh"] = {"Mohawk"},
["moi"] = {"Mboi"},
["moj"] = {"Monzombo"},
["mok"] = {"Morori"},
["mom"] = {"Mangue"},
["moo"] = {"Monom"},
["mop"] = {"Mopán Maya"},
["moq"] = {"Mor (Bomberai Peninsula)"},
["mor"] = {"Moro"},
["mos"] = {"Mossi"},
["mot"] = {"Barí"},
["mou"] = {"Mogum"},
["mov"] = {"Mohave"},
["mow"] = {"Moi (Congo)"},
["mox"] = {"Molima"},
["moy"] = {"Shekkacho"},
["moz"] = {"Mukulu", "Gergiko"},
["mpa"] = {"Mpoto"},
["mpb"] = {"Malak Malak", "Mullukmulluk"},
["mpc"] = {"Mangarrayi"},
["mpd"] = {"Machinere"},
["mpe"] = {"Majang"},
["mpg"] = {"Marba"},
["mph"] = {"Maung"},
["mpi"] = {"Mpade"},
["mpj"] = {"Martu Wangka", "Wangkajunga"},
["mpk"] = {"Mbara (Chad)"},
["mpl"] = {"Middle Watut"},
["mpm"] = {"Yosondúa Mixtec"},
["mpn"] = {"Mindiri"},
["mpo"] = {"Miu"},
["mpp"] = {"Migabac"},
["mpq"] = {"Matís"},
["mpr"] = {"Vangunu"},
["mps"] = {"Dadibi"},
["mpt"] = {"Mian"},
["mpu"] = {"Makuráp"},
["mpv"] = {"Mungkip"},
["mpw"] = {"Mapidian"},
["mpx"] = {"Misima-Panaeati"},
["mpy"] = {"Mapia"},
["mpz"] = {"Mpi"},
["mqa"] = {"Maba (Indonesia)"},
["mqb"] = {"Mbuko"},
["mqc"] = {"Mangole"},
["mqe"] = {"Matepi"},
["mqf"] = {"Momuna"},
["mqg"] = {"Kota Bangun Kutai Malay"},
["mqh"] = {"Tlazoyaltepec Mixtec"},
["mqi"] = {"Mariri"},
["mqj"] = {"Mamasa"},
["mqk"] = {"Rajah Kabunsuwan Manobo"},
["mql"] = {"Mbelime"},
["mqm"] = {"South Marquesan"},
["mqn"] = {"Moronene"},
["mqo"] = {"Modole"},
["mqp"] = {"Manipa"},
["mqq"] = {"Minokok"},
["mqr"] = {"Mander"},
["mqs"] = {"West Makian"},
["mqt"] = {"Mok"},
["mqu"] = {"Mandari"},
["mqv"] = {"Mosimo"},
["mqw"] = {"Murupi"},
["mqx"] = {"Mamuju"},
["mqy"] = {"Manggarai"},
["mqz"] = {"Pano"},
["mra"] = {"Mlabri"},
["mrb"] = {"Marino"},
["mrc"] = {"Maricopa"},
["mrd"] = {"Western Magar"},
["mre"] = {"Martha's Vineyard Sign Language"},
["mrf"] = {"Elseng"},
["mrg"] = {"Mising"},
["mrh"] = {"Mara Chin"},
["mrj"] = {"Western Mari"},
["mrk"] = {"Hmwaveke"},
["mrl"] = {"Mortlockese"},
["mrm"] = {"Merlav", "Mwerlap"},
["mrn"] = {"Cheke Holo"},
["mro"] = {"Mru"},
["mrp"] = {"Morouas"},
["mrq"] = {"North Marquesan"},
["mrr"] = {"Maria (India)"},
["mrs"] = {"Maragus"},
["mrt"] = {"Marghi Central"},
["mru"] = {"Mono (Cameroon)"},
["mrv"] = {"Mangareva"},
["mrw"] = {"Maranao"},
["mrx"] = {"Maremgi", "Dineor"},
["mry"] = {"Mandaya"},
["mrz"] = {"Marind"},
["msb"] = {"Masbatenyo"},
["msc"] = {"Sankaran Maninka"},
["msd"] = {"Yucatec Maya Sign Language"},
["mse"] = {"Musey"},
["msf"] = {"Mekwei"},
["msg"] = {"Moraid"},
["msh"] = {"Masikoro Malagasy"},
["msi"] = {"Sabah Malay"},
["msj"] = {"Ma (Democratic Republic of Congo)"},
["msk"] = {"Mansaka"},
["msl"] = {"Molof", "Poule"},
["msm"] = {"Agusan Manobo"},
["msn"] = {"Vurës"},
["mso"] = {"Mombum"},
["msp"] = {"Maritsauá"},
["msq"] = {"Caac"},
["msr"] = {"Mongolian Sign Language"},
["mss"] = {"West Masela"},
["msu"] = {"Musom"},
["msv"] = {"Maslam"},
["msw"] = {"Mansoanka"},
["msx"] = {"Moresada"},
["msy"] = {"Aruamu"},
["msz"] = {"Momare"},
["mta"] = {"Cotabato Manobo"},
["mtb"] = {"Anyin Morofo"},
["mtc"] = {"Munit"},
["mtd"] = {"Mualang"},
["mte"] = {"Mono (Solomon Islands)"},
["mtf"] = {"Murik (Papua New Guinea)"},
["mtg"] = {"Una"},
["mth"] = {"Munggui"},
["mti"] = {"Maiwa (Papua New Guinea)"},
["mtj"] = {"Moskona"},
["mtk"] = {"Mbe'"},
["mtl"] = {"Montol"},
["mtm"] = {"Mator"},
["mtn"] = {"Matagalpa"},
["mto"] = {"Totontepec Mixe"},
["mtp"] = {"Wichí Lhamtés Nocten"},
["mtq"] = {"Muong"},
["mtr"] = {"Mewari"},
["mts"] = {"Yora"},
["mtt"] = {"Mota"},
["mtu"] = {"Tututepec Mixtec"},
["mtv"] = {"Asaro'o"},
["mtw"] = {"Southern Binukidnon"},
["mtx"] = {"Tidaá Mixtec"},
["mty"] = {"Nabi"},
["mua"] = {"Mundang"},
["mub"] = {"Mubi"},
["muc"] = {"Ajumbu"},
["mud"] = {"Mednyj Aleut"},
["mue"] = {"Media Lengua"},
["mug"] = {"Musgu"},
["muh"] = {"Mündü"},
["mui"] = {"Musi"},
["muj"] = {"Mabire"},
["muk"] = {"Mugom"},
["mul"] = {"Multiple languages"},
["mum"] = {"Maiwala"},
["mun"] = {"Munda languages"},
["muo"] = {"Nyong"},
["mup"] = {"Malvi"},
["muq"] = {"Eastern Xiangxi Miao"},
["mur"] = {"Murle"},
["mus"] = {"Creek"},
["mut"] = {"Western Muria"},
["muu"] = {"Yaaku"},
["muv"] = {"Muthuvan"},
["mux"] = {"Bo-Ung"},
["muy"] = {"Muyang"},
["muz"] = {"Mursi"},
["mva"] = {"Manam"},
["mvb"] = {"Mattole"},
["mvd"] = {"Mamboru"},
["mve"] = {"Marwari (Pakistan)"},
["mvf"] = {"Peripheral Mongolian"},
["mvg"] = {"Yucuañe Mixtec"},
["mvh"] = {"Mulgi"},
["mvi"] = {"Miyako"},
["mvk"] = {"Mekmek"},
["mvl"] = {"Mbara (Australia)"},
["mvn"] = {"Minaveha"},
["mvo"] = {"Marovo"},
["mvp"] = {"Duri"},
["mvq"] = {"Moere"},
["mvr"] = {"Marau"},
["mvs"] = {"Massep"},
["mvt"] = {"Mpotovoro"},
["mvu"] = {"Marfa"},
["mvv"] = {"Tagal Murut"},
["mvw"] = {"Machinga"},
["mvx"] = {"Meoswar"},
["mvy"] = {"Indus Kohistani"},
["mvz"] = {"Mesqan"},
["mwa"] = {"Mwatebu"},
["mwb"] = {"Juwal"},
["mwc"] = {"Are"},
["mwe"] = {"Mwera (Chimwera)"},
["mwf"] = {"Murrinh-Patha"},
["mwg"] = {"Aiklep"},
["mwh"] = {"Mouk-Aria"},
["mwi"] = {"Labo", "Ninde"},
["mwk"] = {"Kita Maninkakan"},
["mwl"] = {"Mirandese"},
["mwm"] = {"Sar"},
["mwn"] = {"Nyamwanga"},
["mwo"] = {"Central Maewo"},
["mwp"] = {"Kala Lagaw Ya"},
["mwq"] = {"Mün Chin"},
["mwr"] = {"Marwari"},
["mws"] = {"Mwimbi-Muthambi"},
["mwt"] = {"Moken"},
["mwu"] = {"Mittu"},
["mwv"] = {"Mentawai"},
["mww"] = {"Hmong Daw"},
["mwz"] = {"Moingi"},
["mxa"] = {"Northwest Oaxaca Mixtec"},
["mxb"] = {"Tezoatlán Mixtec"},
["mxc"] = {"Manyika"},
["mxd"] = {"Modang"},
["mxe"] = {"Mele-Fila"},
["mxf"] = {"Malgbe"},
["mxg"] = {"Mbangala"},
["mxh"] = {"Mvuba"},
["mxi"] = {"Mozarabic"},
["mxj"] = {"Miju-Mishmi", "Geman Deng"},
["mxk"] = {"Monumbo"},
["mxl"] = {"Maxi Gbe"},
["mxm"] = {"Meramera"},
["mxn"] = {"Moi (Indonesia)"},
["mxo"] = {"Mbowe"},
["mxp"] = {"Tlahuitoltepec Mixe"},
["mxq"] = {"Juquila Mixe"},
["mxr"] = {"Murik (Malaysia)"},
["mxs"] = {"Huitepec Mixtec"},
["mxt"] = {"Jamiltepec Mixtec"},
["mxu"] = {"Mada (Cameroon)"},
["mxv"] = {"Metlatónoc Mixtec"},
["mxw"] = {"Namo"},
["mxx"] = {"Mahou", "Mawukakan"},
["mxy"] = {"Southeastern Nochixtlán Mixtec"},
["mxz"] = {"Central Masela"},
["myb"] = {"Mbay"},
["myc"] = {"Mayeka"},
["mye"] = {"Myene"},
["myf"] = {"Bambassi"},
["myg"] = {"Manta"},
["myh"] = {"Makah"},
["myj"] = {"Mangayat"},
["myk"] = {"Mamara Senoufo"},
["myl"] = {"Moma"},
["mym"] = {"Me'en"},
["myn"] = {"Mayan languages"},
["myo"] = {"Anfillo"},
["myp"] = {"Pirahã"},
["myr"] = {"Muniche"},
["mys"] = {"Mesmes"},
["myu"] = {"Mundurukú"},
["myv"] = {"Erzya"},
["myw"] = {"Muyuw"},
["myx"] = {"Masaaba"},
["myy"] = {"Macuna"},
["myz"] = {"Classical Mandaic"},
["mza"] = {"Santa María Zacatepec Mixtec"},
["mzb"] = {"Tumzabt"},
["mzc"] = {"Madagascar Sign Language"},
["mzd"] = {"Malimba"},
["mze"] = {"Morawa"},
["mzg"] = {"Monastic Sign Language"},
["mzh"] = {"Wichí Lhamtés Güisnay"},
["mzi"] = {"Ixcatlán Mazatec"},
["mzj"] = {"Manya"},
["mzk"] = {"Nigeria Mambila"},
["mzl"] = {"Mazatlán Mixe"},
["mzm"] = {"Mumuye"},
["mzn"] = {"Mazanderani"},
["mzo"] = {"Matipuhy"},
["mzp"] = {"Movima"},
["mzq"] = {"Mori Atas"},
["mzr"] = {"Marúbo"},
["mzs"] = {"Macanese"},
["mzt"] = {"Mintil"},
["mzu"] = {"Inapang"},
["mzv"] = {"Manza"},
["mzw"] = {"Deg"},
["mzx"] = {"Mawayana"},
["mzy"] = {"Mozambican Sign Language"},
["mzz"] = {"Maiadomu"},
["naa"] = {"Namla"},
["nab"] = {"Southern Nambikuára"},
["nac"] = {"Narak"},
["nae"] = {"Naka'ela"},
["naf"] = {"Nabak"},
["nag"] = {"Naga Pidgin"},
["nah"] = {"Nahuatl languages"},
["nai"] = {"North American Indian languages"},
["naj"] = {"Nalu"},
["nak"] = {"Nakanai"},
["nal"] = {"Nalik"},
["nam"] = {"Ngan'gityemerri"},
["nan"] = {"Min Nan Chinese"},
["nao"] = {"Naaba"},
["nap"] = {"Neapolitan"},
["naq"] = {"Khoekhoe", "Nama (Namibia)"},
["nar"] = {"Iguta"},
["nas"] = {"Naasioi"},
["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"},
["naw"] = {"Nawuri"},
["nax"] = {"Nakwi"},
["nay"] = {"Ngarrindjeri"},
["naz"] = {"Coatepec Nahuatl"},
["nba"] = {"Nyemba"},
["nbb"] = {"Ndoe"},
["nbc"] = {"Chang Naga"},
["nbd"] = {"Ngbinda"},
["nbe"] = {"Konyak Naga"},
["nbg"] = {"Nagarchal"},
["nbh"] = {"Ngamo"},
["nbi"] = {"Mao Naga"},
["nbj"] = {"Ngarinyman"},
["nbk"] = {"Nake"},
["nbm"] = {"Ngbaka Ma'bo"},
["nbn"] = {"Kuri"},
["nbo"] = {"Nkukoli"},
["nbp"] = {"Nnam"},
["nbq"] = {"Nggem"},
["nbr"] = {"Numana"},
["nbs"] = {"Namibian Sign Language"},
["nbt"] = {"Na"},
["nbu"] = {"Rongmei Naga"},
["nbv"] = {"Ngamambo"},
["nbw"] = {"Southern Ngbandi"},
["nby"] = {"Ningera"},
["nca"] = {"Iyo"},
["ncb"] = {"Central Nicobarese"},
["ncc"] = {"Ponam"},
["ncd"] = {"Nachering"},
["nce"] = {"Yale"},
["ncf"] = {"Notsi"},
["ncg"] = {"Nisga'a"},
["nch"] = {"Central Huasteca Nahuatl"},
["nci"] = {"Classical Nahuatl"},
["ncj"] = {"Northern Puebla Nahuatl"},
["nck"] = {"Na-kara"},
["ncl"] = {"Michoacán Nahuatl"},
["ncm"] = {"Nambo"},
["ncn"] = {"Nauna"},
["nco"] = {"Sibe"},
["ncq"] = {"Northern Katang"},
["ncr"] = {"Ncane"},
["ncs"] = {"Nicaraguan Sign Language"},
["nct"] = {"Chothe Naga"},
["ncu"] = {"Chumburung"},
["ncx"] = {"Central Puebla Nahuatl"},
["ncz"] = {"Natchez"},
["nda"] = {"Ndasa"},
["ndb"] = {"Kenswei Nsei"},
["ndc"] = {"Ndau"},
["ndd"] = {"Nde-Nsele-Nta"},
["ndf"] = {"Nadruvian"},
["ndg"] = {"Ndengereko"},
["ndh"] = {"Ndali"},
["ndi"] = {"Samba Leko"},
["ndj"] = {"Ndamba"},
["ndk"] = {"Ndaka"},
["ndl"] = {"Ndolo"},
["ndm"] = {"Ndam"},
["ndn"] = {"Ngundi"},
["ndp"] = {"Ndo"},
["ndq"] = {"Ndombe"},
["ndr"] = {"Ndoola"},
["nds"] = {"Low German", "Low Saxon"},
["ndt"] = {"Ndunga"},
["ndu"] = {"Dugun"},
["ndv"] = {"Ndut"},
["ndw"] = {"Ndobo"},
["ndx"] = {"Nduga"},
["ndy"] = {"Lutos"},
["ndz"] = {"Ndogo"},
["nea"] = {"Eastern Ngad'a"},
["neb"] = {"Toura (Côte d'Ivoire)"},
["nec"] = {"Nedebang"},
["ned"] = {"Nde-Gbite"},
["nee"] = {"Nêlêmwa-Nixumwak"},
["nef"] = {"Nefamese"},
["neg"] = {"Negidal"},
["neh"] = {"Nyenkha"},
["nei"] = {"Neo-Hittite"},
["nej"] = {"Neko"},
["nek"] = {"Neku"},
["nem"] = {"Nemi"},
["nen"] = {"Nengone"},
["neo"] = {"Ná-Meo"},
["neq"] = {"North Central Mixe"},
["ner"] = {"Yahadian"},
["nes"] = {"Bhoti Kinnauri"},
["net"] = {"Nete"},
["neu"] = {"Neo"},
["nev"] = {"Nyaheun"},
["new"] = {"Newari", "Nepal Bhasa"},
["nex"] = {"Neme"},
["ney"] = {"Neyo"},
["nez"] = {"Nez Perce"},
["nfa"] = {"Dhao"},
["nfd"] = {"Ahwai"},
["nfl"] = {"Ayiwo", "Äiwoo"},
["nfr"] = {"Nafaanra"},
["nfu"] = {"Mfumte"},
["nga"] = {"Ngbaka"},
["ngb"] = {"Northern Ngbandi"},
["ngc"] = {"Ngombe (Democratic Republic of Congo)"},
["ngd"] = {"Ngando (Central African Republic)"},
["nge"] = {"Ngemba"},
["ngf"] = {"Trans-New Guinea languages"},
["ngg"] = {"Ngbaka Manza"},
["ngh"] = {"Nǁng"},
["ngi"] = {"Ngizim"},
["ngj"] = {"Ngie"},
["ngk"] = {"Dalabon"},
["ngl"] = {"Lomwe"},
["ngm"] = {"Ngatik Men's Creole"},
["ngn"] = {"Ngwo"},
["ngp"] = {"Ngulu"},
["ngq"] = {"Ngurimi", "Ngoreme"},
["ngr"] = {"Engdewu"},
["ngs"] = {"Gvoko"},
["ngt"] = {"Kriang", "Ngeq"},
["ngu"] = {"Guerrero Nahuatl"},
["ngv"] = {"Nagumi"},
["ngw"] = {"Ngwaba"},
["ngx"] = {"Nggwahyi"},
["ngy"] = {"Tibea"},
["ngz"] = {"Ngungwel"},
["nha"] = {"Nhanda"},
["nhb"] = {"Beng"},
["nhc"] = {"Tabasco Nahuatl"},
["nhd"] = {"Chiripá", "Ava Guaraní"},
["nhe"] = {"Eastern Huasteca Nahuatl"},
["nhf"] = {"Nhuwala"},
["nhg"] = {"Tetelcingo Nahuatl"},
["nhh"] = {"Nahari"},
["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"},
["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"},
["nhm"] = {"Morelos Nahuatl"},
["nhn"] = {"Central Nahuatl"},
["nho"] = {"Takuu"},
["nhp"] = {"Isthmus-Pajapan Nahuatl"},
["nhq"] = {"Huaxcaleca Nahuatl"},
["nhr"] = {"Naro"},
["nht"] = {"Ometepec Nahuatl"},
["nhu"] = {"Noone"},
["nhv"] = {"Temascaltepec Nahuatl"},
["nhw"] = {"Western Huasteca Nahuatl"},
["nhx"] = {"Isthmus-Mecayapan Nahuatl"},
["nhy"] = {"Northern Oaxaca Nahuatl"},
["nhz"] = {"Santa María La Alta Nahuatl"},
["nia"] = {"Nias"},
["nib"] = {"Nakame"},
["nic"] = {"Niger-Kordofanian languages"},
["nid"] = {"Ngandi"},
["nie"] = {"Niellim"},
["nif"] = {"Nek"},
["nig"] = {"Ngalakgan"},
["nih"] = {"Nyiha (Tanzania)"},
["nii"] = {"Nii"},
["nij"] = {"Ngaju"},
["nik"] = {"Southern Nicobarese"},
["nil"] = {"Nila"},
["nim"] = {"Nilamba"},
["nin"] = {"Ninzo"},
["nio"] = {"Nganasan"},
["niq"] = {"Nandi"},
["nir"] = {"Nimboran"},
["nis"] = {"Nimi"},
["nit"] = {"Southeastern Kolami"},
["niu"] = {"Niuean"},
["niv"] = {"Gilyak"},
["niw"] = {"Nimo"},
["nix"] = {"Hema"},
["niy"] = {"Ngiti"},
["niz"] = {"Ningil"},
["nja"] = {"Nzanyi"},
["njb"] = {"Nocte Naga"},
["njd"] = {"Ndonde Hamba"},
["njh"] = {"Lotha Naga"},
["nji"] = {"Gudanji"},
["njj"] = {"Njen"},
["njl"] = {"Njalgulgule"},
["njm"] = {"Angami Naga"},
["njn"] = {"Liangmai Naga"},
["njo"] = {"Ao Naga"},
["njr"] = {"Njerep"},
["njs"] = {"Nisa"},
["njt"] = {"Ndyuka-Trio Pidgin"},
["nju"] = {"Ngadjunmaya"},
["njx"] = {"Kunyi"},
["njy"] = {"Njyem"},
["njz"] = {"Nyishi"},
["nka"] = {"Nkoya"},
["nkb"] = {"Khoibu Naga"},
["nkc"] = {"Nkongho"},
["nkd"] = {"Koireng"},
["nke"] = {"Duke"},
["nkf"] = {"Inpui Naga"},
["nkg"] = {"Nekgini"},
["nkh"] = {"Khezha Naga"},
["nki"] = {"Thangal Naga"},
["nkj"] = {"Nakai"},
["nkk"] = {"Nokuku"},
["nkm"] = {"Namat"},
["nkn"] = {"Nkangala"},
["nko"] = {"Nkonya"},
["nkp"] = {"Niuatoputapu"},
["nkq"] = {"Nkami"},
["nkr"] = {"Nukuoro"},
["nks"] = {"North Asmat"},
["nkt"] = {"Nyika (Tanzania)"},
["nku"] = {"Bouna Kulango"},
["nkv"] = {"Nyika (Malawi and Zambia)"},
["nkw"] = {"Nkutu"},
["nkx"] = {"Nkoroo"},
["nkz"] = {"Nkari"},
["nla"] = {"Ngombale"},
["nlc"] = {"Nalca"},
["nle"] = {"East Nyala"},
["nlg"] = {"Gela"},
["nli"] = {"Grangali"},
["nlj"] = {"Nyali"},
["nlk"] = {"Ninia Yali"},
["nll"] = {"Nihali"},
["nlm"] = {"Mankiyali"},
["nlo"] = {"Ngul"},
["nlq"] = {"Lao Naga"},
["nlu"] = {"Nchumbulu"},
["nlv"] = {"Orizaba Nahuatl"},
["nlw"] = {"Walangama"},
["nlx"] = {"Nahali"},
["nly"] = {"Nyamal"},
["nlz"] = {"Nalögo"},
["nma"] = {"Maram Naga"},
["nmb"] = {"Big Nambas", "V'ënen Taut"},
["nmc"] = {"Ngam"},
["nmd"] = {"Ndumu"},
["nme"] = {"Mzieme Naga"},
["nmf"] = {"Tangkhul Naga (India)"},
["nmg"] = {"Kwasio"},
["nmh"] = {"Monsang Naga"},
["nmi"] = {"Nyam"},
["nmj"] = {"Ngombe (Central African Republic)"},
["nmk"] = {"Namakura"},
["nml"] = {"Ndemli"},
["nmm"] = {"Manangba"},
["nmn"] = {"ǃXóõ"},
["nmo"] = {"Moyon Naga"},
["nmp"] = {"Nimanbur"},
["nmq"] = {"Nambya"},
["nmr"] = {"Nimbari"},
["nms"] = {"Letemboi"},
["nmt"] = {"Namonuito"},
["nmu"] = {"Northeast Maidu"},
["nmv"] = {"Ngamini"},
["nmw"] = {"Nimoa", "Rifao"},
["nmx"] = {"Nama (Papua New Guinea)"},
["nmy"] = {"Namuyi"},
["nmz"] = {"Nawdm"},
["nna"] = {"Nyangumarta"},
["nnb"] = {"Nande"},
["nnc"] = {"Nancere"},
["nnd"] = {"West Ambae"},
["nne"] = {"Ngandyera"},
["nnf"] = {"Ngaing"},
["nng"] = {"Maring Naga"},
["nnh"] = {"Ngiemboon"},
["nni"] = {"North Nuaulu"},
["nnj"] = {"Nyangatom"},
["nnk"] = {"Nankina"},
["nnl"] = {"Northern Rengma Naga"},
["nnm"] = {"Namia"},
["nnn"] = {"Ngete"},
["nnp"] = {"Wancho Naga"},
["nnq"] = {"Ngindo"},
["nnr"] = {"Narungga"},
["nnt"] = {"Nanticoke"},
["nnu"] = {"Dwang"},
["nnv"] = {"Nugunu (Australia)"},
["nnw"] = {"Southern Nuni"},
["nny"] = {"Nyangga"},
["nnz"] = {"Nda'nda'"},
["noa"] = {"Woun Meu"},
["noc"] = {"Nuk"},
["nod"] = {"Northern Thai"},
["noe"] = {"Nimadi"},
["nof"] = {"Nomane"},
["nog"] = {"Nogai"},
["noh"] = {"Nomu"},
["noi"] = {"Noiri"},
["noj"] = {"Nonuya"},
["nok"] = {"Nooksack"},
["nol"] = {"Nomlaki"},
["non"] = {"Old Norse"},
["nop"] = {"Numanggang"},
["noq"] = {"Ngongo"},
["nos"] = {"Eastern Nisu"},
["not"] = {"Nomatsiguenga"},
["nou"] = {"Ewage-Notu"},
["nov"] = {"Novial"},
["now"] = {"Nyambo"},
["noy"] = {"Noy"},
["noz"] = {"Nayi"},
["npa"] = {"Nar Phu"},
["npb"] = {"Nupbikha"},
["npg"] = {"Ponyo-Gongwang Naga"},
["nph"] = {"Phom Naga"},
["npi"] = {"Nepali (individual language)"},
["npl"] = {"Southeastern Puebla Nahuatl"},
["npn"] = {"Mondropolon"},
["npo"] = {"Pochuri Naga"},
["nps"] = {"Nipsan"},
["npu"] = {"Puimei Naga"},
["npx"] = {"Noipx"},
["npy"] = {"Napu"},
["nqg"] = {"Southern Nago"},
["nqk"] = {"Kura Ede Nago"},
["nql"] = {"Ngendelengo"},
["nqm"] = {"Ndom"},
["nqn"] = {"Nen"},
["nqo"] = {"N'Ko", "N’Ko"},
["nqq"] = {"Kyan-Karyaw Naga"},
["nqt"] = {"Nteng"},
["nqy"] = {"Akyaung Ari Naga"},
["nra"] = {"Ngom"},
["nrb"] = {"Nara"},
["nrc"] = {"Noric"},
["nre"] = {"Southern Rengma Naga"},
["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"},
["nrg"] = {"Narango"},
["nri"] = {"Chokri Naga"},
["nrk"] = {"Ngarla"},
["nrl"] = {"Ngarluma"},
["nrm"] = {"Narom"},
["nrn"] = {"Norn"},
["nrp"] = {"North Picene"},
["nrr"] = {"Norra", "Nora"},
["nrt"] = {"Northern Kalapuya"},
["nru"] = {"Narua"},
["nrx"] = {"Ngurmbur"},
["nrz"] = {"Lala"},
["nsa"] = {"Sangtam Naga"},
["nsb"] = {"Lower Nossob"},
["nsc"] = {"Nshi"},
["nsd"] = {"Southern Nisu"},
["nse"] = {"Nsenga"},
["nsf"] = {"Northwestern Nisu"},
["nsg"] = {"Ngasa"},
["nsh"] = {"Ngoshie"},
["nsi"] = {"Nigerian Sign Language"},
["nsk"] = {"Naskapi"},
["nsl"] = {"Norwegian Sign Language"},
["nsm"] = {"Sumi Naga"},
["nsn"] = {"Nehan"},
["nso"] = {"Pedi", "Northern Sotho", "Sepedi"},
["nsp"] = {"Nepalese Sign Language"},
["nsq"] = {"Northern Sierra Miwok"},
["nsr"] = {"Maritime Sign Language"},
["nss"] = {"Nali"},
["nst"] = {"Tase Naga"},
["nsu"] = {"Sierra Negra Nahuatl"},
["nsv"] = {"Southwestern Nisu"},
["nsw"] = {"Navut"},
["nsx"] = {"Nsongo"},
["nsy"] = {"Nasal"},
["nsz"] = {"Nisenan"},
["ntd"] = {"Northern Tidung"},
["nte"] = {"Nathembo"},
["ntg"] = {"Ngantangarra"},
["nti"] = {"Natioro"},
["ntj"] = {"Ngaanyatjarra"},
["ntk"] = {"Ikoma-Nata-Isenye"},
["ntm"] = {"Nateni"},
["nto"] = {"Ntomba"},
["ntp"] = {"Northern Tepehuan"},
["ntr"] = {"Delo"},
["ntu"] = {"Natügu"},
["ntw"] = {"Nottoway"},
["ntx"] = {"Tangkhul Naga (Myanmar)"},
["nty"] = {"Mantsi"},
["ntz"] = {"Natanzi"},
["nua"] = {"Yuanga"},
["nub"] = {"Nubian languages"},
["nuc"] = {"Nukuini"},
["nud"] = {"Ngala"},
["nue"] = {"Ngundu"},
["nuf"] = {"Nusu"},
["nug"] = {"Nungali"},
["nuh"] = {"Ndunda"},
["nui"] = {"Ngumbi"},
["nuj"] = {"Nyole"},
["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"},
["nul"] = {"Nusa Laut"},
["num"] = {"Niuafo'ou"},
["nun"] = {"Anong"},
["nuo"] = {"Nguôn"},
["nup"] = {"Nupe-Nupe-Tako"},
["nuq"] = {"Nukumanu"},
["nur"] = {"Nukuria"},
["nus"] = {"Nuer"},
["nut"] = {"Nung (Viet Nam)"},
["nuu"] = {"Ngbundu"},
["nuv"] = {"Northern Nuni"},
["nuw"] = {"Nguluwan"},
["nux"] = {"Mehek"},
["nuy"] = {"Nunggubuyu"},
["nuz"] = {"Tlamacazapa Nahuatl"},
["nvh"] = {"Nasarian"},
["nvm"] = {"Namiae"},
["nvo"] = {"Nyokon"},
["nwa"] = {"Nawathinehena"},
["nwb"] = {"Nyabwa"},
["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"},
["nwe"] = {"Ngwe"},
["nwg"] = {"Ngayawung"},
["nwi"] = {"Southwest Tanna"},
["nwm"] = {"Nyamusa-Molo"},
["nwo"] = {"Nauo"},
["nwr"] = {"Nawaru"},
["nww"] = {"Ndwewe"},
["nwx"] = {"Middle Newar"},
["nwy"] = {"Nottoway-Meherrin"},
["nxa"] = {"Nauete"},
["nxd"] = {"Ngando (Democratic Republic of Congo)"},
["nxe"] = {"Nage"},
["nxg"] = {"Ngad'a"},
["nxi"] = {"Nindi"},
["nxk"] = {"Koki Naga"},
["nxl"] = {"South Nuaulu"},
["nxm"] = {"Numidian"},
["nxn"] = {"Ngawun"},
["nxo"] = {"Ndambomo"},
["nxq"] = {"Naxi"},
["nxr"] = {"Ninggerum"},
["nxx"] = {"Nafri"},
["nyb"] = {"Nyangbo"},
["nyc"] = {"Nyanga-li"},
["nyd"] = {"Nyore", "Olunyole"},
["nye"] = {"Nyengo"},
["nyf"] = {"Giryama", "Kigiryama"},
["nyg"] = {"Nyindu"},
["nyh"] = {"Nyikina"},
["nyi"] = {"Ama (Sudan)"},
["nyj"] = {"Nyanga"},
["nyk"] = {"Nyaneka"},
["nyl"] = {"Nyeu"},
["nym"] = {"Nyamwezi"},
["nyn"] = {"Nyankole"},
["nyo"] = {"Nyoro"},
["nyp"] = {"Nyang'i"},
["nyq"] = {"Nayini"},
["nyr"] = {"Nyiha (Malawi)"},
["nys"] = {"Nyungar"},
["nyt"] = {"Nyawaygi"},
["nyu"] = {"Nyungwe"},
["nyv"] = {"Nyulnyul"},
["nyw"] = {"Nyaw"},
["nyx"] = {"Nganyaywana"},
["nyy"] = {"Nyakyusa-Ngonde"},
["nza"] = {"Tigon Mbembe"},
["nzb"] = {"Njebi"},
["nzd"] = {"Nzadi"},
["nzi"] = {"Nzima"},
["nzk"] = {"Nzakara"},
["nzm"] = {"Zeme Naga"},
["nzr"] = {"Dir-Nyamzak-Mbarimi"},
["nzs"] = {"New Zealand Sign Language"},
["nzu"] = {"Teke-Nzikou"},
["nzy"] = {"Nzakambay"},
["nzz"] = {"Nanga Dama Dogon"},
["oaa"] = {"Orok"},
["oac"] = {"Oroch"},
["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"},
["oav"] = {"Old Avar"},
["obi"] = {"Obispeño"},
["obk"] = {"Southern Bontok"},
["obl"] = {"Oblo"},
["obm"] = {"Moabite"},
["obo"] = {"Obo Manobo"},
["obr"] = {"Old Burmese"},
["obt"] = {"Old Breton"},
["obu"] = {"Obulom"},
["oca"] = {"Ocaina"},
["och"] = {"Old Chinese"},
["ocm"] = {"Old Cham"},
["oco"] = {"Old Cornish"},
["ocu"] = {"Atzingo Matlatzinca"},
["oda"] = {"Odut"},
["odk"] = {"Od"},
["odt"] = {"Old Dutch"},
["odu"] = {"Odual"},
["ofo"] = {"Ofo"},
["ofs"] = {"Old Frisian"},
["ofu"] = {"Efutop"},
["ogb"] = {"Ogbia"},
["ogc"] = {"Ogbah"},
["oge"] = {"Old Georgian"},
["ogg"] = {"Ogbogolo"},
["ogo"] = {"Khana"},
["ogu"] = {"Ogbronuagum"},
["oht"] = {"Old Hittite"},
["ohu"] = {"Old Hungarian"},
["oia"] = {"Oirata"},
["oie"] = {"Okolie"},
["oin"] = {"Inebu One"},
["ojb"] = {"Northwestern Ojibwa"},
["ojc"] = {"Central Ojibwa"},
["ojg"] = {"Eastern Ojibwa"},
["ojp"] = {"Old Japanese"},
["ojs"] = {"Severn Ojibwa"},
["ojv"] = {"Ontong Java"},
["ojw"] = {"Western Ojibwa"},
["oka"] = {"Okanagan"},
["okb"] = {"Okobo"},
["okc"] = {"Kobo"},
["okd"] = {"Okodia"},
["oke"] = {"Okpe (Southwestern Edo)"},
["okg"] = {"Koko Babangk"},
["okh"] = {"Koresh-e Rostam"},
["oki"] = {"Okiek"},
["okj"] = {"Oko-Juwoi"},
["okk"] = {"Kwamtim One"},
["okl"] = {"Old Kentish Sign Language"},
["okm"] = {"Middle Korean (10th-16th cent.)"},
["okn"] = {"Oki-No-Erabu"},
["oko"] = {"Old Korean (3rd-9th cent.)"},
["okr"] = {"Kirike"},
["oks"] = {"Oko-Eni-Osayen"},
["oku"] = {"Oku"},
["okv"] = {"Orokaiva"},
["okx"] = {"Okpe (Northwestern Edo)"},
["okz"] = {"Old Khmer"},
["ola"] = {"Walungge"},
["old"] = {"Mochi"},
["ole"] = {"Olekha"},
["olk"] = {"Olkol"},
["olm"] = {"Oloma"},
["olo"] = {"Livvi"},
["olr"] = {"Olrat"},
["olt"] = {"Old Lithuanian"},
["olu"] = {"Kuvale"},
["oma"] = {"Omaha-Ponca"},
["omb"] = {"East Ambae"},
["omc"] = {"Mochica"},
["omg"] = {"Omagua"},
["omi"] = {"Omi"},
["omk"] = {"Omok"},
["oml"] = {"Ombo"},
["omn"] = {"Minoan"},
["omo"] = {"Utarmbung"},
["omp"] = {"Old Manipuri"},
["omq"] = {"Oto-Manguean languages"},
["omr"] = {"Old Marathi"},
["omt"] = {"Omotik"},
["omu"] = {"Omurano"},
["omv"] = {"Omotic languages"},
["omw"] = {"South Tairora"},
["omx"] = {"Old Mon"},
["omy"] = {"Old Malay"},
["ona"] = {"Ona"},
["onb"] = {"Lingao"},
["one"] = {"Oneida"},
["ong"] = {"Olo"},
["oni"] = {"Onin"},
["onj"] = {"Onjob"},
["onk"] = {"Kabore One"},
["onn"] = {"Onobasulu"},
["ono"] = {"Onondaga"},
["onp"] = {"Sartang"},
["onr"] = {"Northern One"},
["ons"] = {"Ono"},
["ont"] = {"Ontenu"},
["onu"] = {"Unua"},
["onw"] = {"Old Nubian"},
["onx"] = {"Onin Based Pidgin"},
["ood"] = {"Tohono O'odham"},
["oog"] = {"Ong"},
["oon"] = {"Önge"},
["oor"] = {"Oorlams"},
["oos"] = {"Old Ossetic"},
["opa"] = {"Okpamheri"},
["opk"] = {"Kopkaka"},
["opm"] = {"Oksapmin"},
["opo"] = {"Opao"},
["opt"] = {"Opata"},
["opy"] = {"Ofayé"},
["ora"] = {"Oroha"},
["orc"] = {"Orma"},
["ore"] = {"Orejón"},
["org"] = {"Oring"},
["orh"] = {"Oroqen"},
["orn"] = {"Orang Kanaq"},
["oro"] = {"Orokolo"},
["orr"] = {"Oruma"},
["ors"] = {"Orang Seletar"},
["ort"] = {"Adivasi Oriya"},
["oru"] = {"Ormuri"},
["orv"] = {"Old Russian"},
["orw"] = {"Oro Win"},
["orx"] = {"Oro"},
["ory"] = {"Odia (individual language)", "Oriya (individual language)"},
["orz"] = {"Ormu"},
["osa"] = {"Osage"},
["osc"] = {"Oscan"},
["osi"] = {"Osing"},
["osn"] = {"Old Sundanese"},
["oso"] = {"Ososo"},
["osp"] = {"Old Spanish"},
["ost"] = {"Osatu"},
["osu"] = {"Southern One"},
["osx"] = {"Old Saxon"},
["ota"] = {"Ottoman Turkish (1500-1928)"},
["otb"] = {"Old Tibetan"},
["otd"] = {"Ot Danum"},
["ote"] = {"Mezquital Otomi"},
["oti"] = {"Oti"},
["otk"] = {"Old Turkish"},
["otl"] = {"Tilapa Otomi"},
["otm"] = {"Eastern Highland Otomi"},
["otn"] = {"Tenango Otomi"},
["oto"] = {"Otomian languages"},
["otq"] = {"Querétaro Otomi"},
["otr"] = {"Otoro"},
["ots"] = {"Estado de México Otomi"},
["ott"] = {"Temoaya Otomi"},
["otu"] = {"Otuke"},
["otw"] = {"Ottawa"},
["otx"] = {"Texcatepec Otomi"},
["oty"] = {"Old Tamil"},
["otz"] = {"Ixtenco Otomi"},
["oua"] = {"Tagargrent"},
["oub"] = {"Glio-Oubi"},
["oue"] = {"Oune"},
["oui"] = {"Old Uighur"},
["oum"] = {"Ouma"},
["ovd"] = {"Elfdalian", "Övdalian"},
["owi"] = {"Owiniga"},
["owl"] = {"Old Welsh"},
["oyb"] = {"Oy"},
["oyd"] = {"Oyda"},
["oym"] = {"Wayampi"},
["oyy"] = {"Oya'oya"},
["ozm"] = {"Koonzime"},
["paa"] = {"Papuan languages"},
["pab"] = {"Parecís"},
["pac"] = {"Pacoh"},
["pad"] = {"Paumarí"},
["pae"] = {"Pagibete"},
["paf"] = {"Paranawát"},
["pag"] = {"Pangasinan"},
["pah"] = {"Tenharim"},
["pai"] = {"Pe"},
["pak"] = {"Parakanã"},
["pal"] = {"Pahlavi"},
["pam"] = {"Pampanga", "Kapampangan"},
["pao"] = {"Northern Paiute"},
["pap"] = {"Papiamento"},
["paq"] = {"Parya"},
["par"] = {"Panamint", "Timbisha"},
["pas"] = {"Papasena"},
["pau"] = {"Palauan"},
["pav"] = {"Pakaásnovos"},
["paw"] = {"Pawnee"},
["pax"] = {"Pankararé"},
["pay"] = {"Pech"},
["paz"] = {"Pankararú"},
["pbb"] = {"Páez"},
["pbc"] = {"Patamona"},
["pbe"] = {"Mezontla Popoloca"},
["pbf"] = {"Coyotepec Popoloca"},
["pbg"] = {"Paraujano"},
["pbh"] = {"E'ñapa Woromaipu"},
["pbi"] = {"Parkwa"},
["pbl"] = {"Mak (Nigeria)"},
["pbm"] = {"Puebla Mazatec"},
["pbn"] = {"Kpasam"},
["pbo"] = {"Papel"},
["pbp"] = {"Badyara"},
["pbr"] = {"Pangwa"},
["pbs"] = {"Central Pame"},
["pbt"] = {"Southern Pashto"},
["pbu"] = {"Northern Pashto"},
["pbv"] = {"Pnar"},
["pby"] = {"Pyu (Papua New Guinea)"},
["pca"] = {"Santa Inés Ahuatempan Popoloca"},
["pcb"] = {"Pear"},
["pcc"] = {"Bouyei"},
["pcd"] = {"Picard"},
["pce"] = {"Ruching Palaung"},
["pcf"] = {"Paliyan"},
["pcg"] = {"Paniya"},
["pch"] = {"Pardhan"},
["pci"] = {"Duruwa"},
["pcj"] = {"Parenga"},
["pck"] = {"Paite Chin"},
["pcl"] = {"Pardhi"},
["pcm"] = {"Nigerian Pidgin"},
["pcn"] = {"Piti"},
["pcp"] = {"Pacahuara"},
["pcw"] = {"Pyapun"},
["pda"] = {"Anam"},
["pdc"] = {"Pennsylvania German"},
["pdi"] = {"Pa Di"},
["pdn"] = {"Podena", "Fedan"},
["pdo"] = {"Padoe"},
["pdt"] = {"Plautdietsch"},
["pdu"] = {"Kayan"},
["pea"] = {"Peranakan Indonesian"},
["peb"] = {"Eastern Pomo"},
["ped"] = {"Mala (Papua New Guinea)"},
["pee"] = {"Taje"},
["pef"] = {"Northeastern Pomo"},
["peg"] = {"Pengo"},
["peh"] = {"Bonan"},
["pei"] = {"Chichimeca-Jonaz"},
["pej"] = {"Northern Pomo"},
["pek"] = {"Penchal"},
["pel"] = {"Pekal"},
["pem"] = {"Phende"},
["peo"] = {"Old Persian (ca. 600-400 B.C.)"},
["pep"] = {"Kunja"},
["peq"] = {"Southern Pomo"},
["pes"] = {"Iranian Persian"},
["pev"] = {"Pémono"},
["pex"] = {"Petats"},
["pey"] = {"Petjo"},
["pez"] = {"Eastern Penan"},
["pfa"] = {"Pááfang"},
["pfe"] = {"Pere"},
["pfl"] = {"Pfaelzisch"},
["pga"] = {"Sudanese Creole Arabic"},
["pgd"] = {"Gāndhārī"},
["pgg"] = {"Pangwali"},
["pgi"] = {"Pagi"},
["pgk"] = {"Rerep"},
["pgl"] = {"Primitive Irish"},
["pgn"] = {"Paelignian"},
["pgs"] = {"Pangseng"},
["pgu"] = {"Pagu"},
["pgz"] = {"Papua New Guinean Sign Language"},
["pha"] = {"Pa-Hng"},
["phd"] = {"Phudagi"},
["phg"] = {"Phuong"},
["phh"] = {"Phukha"},
["phi"] = {"Philippine languages"},
["phj"] = {"Pahari"},
["phk"] = {"Phake"},
["phl"] = {"Phalura", "Palula"},
["phm"] = {"Phimbi"},
["phn"] = {"Phoenician"},
["pho"] = {"Phunoi"},
["phq"] = {"Phana'"},
["phr"] = {"Pahari-Potwari"},
["pht"] = {"Phu Thai"},
["phu"] = {"Phuan"},
["phv"] = {"Pahlavani"},
["phw"] = {"Phangduwali"},
["pia"] = {"Pima Bajo"},
["pib"] = {"Yine"},
["pic"] = {"Pinji"},
["pid"] = {"Piaroa"},
["pie"] = {"Piro"},
["pif"] = {"Pingelapese"},
["pig"] = {"Pisabo"},
["pih"] = {"Pitcairn-Norfolk"},
["pij"] = {"Pijao"},
["pil"] = {"Yom"},
["pim"] = {"Powhatan"},
["pin"] = {"Piame"},
["pio"] = {"Piapoco"},
["pip"] = {"Pero"},
["pir"] = {"Piratapuyo"},
["pis"] = {"Pijin"},
["pit"] = {"Pitta Pitta"},
["piu"] = {"Pintupi-Luritja"},
["piv"] = {"Pileni", "Vaeakau-Taumako"},
["piw"] = {"Pimbwe"},
["pix"] = {"Piu"},
["piy"] = {"Piya-Kwonci"},
["piz"] = {"Pije"},
["pjt"] = {"Pitjantjatjara"},
["pka"] = {"Ardhamāgadhī Prākrit"},
["pkb"] = {"Pokomo", "Kipfokomo"},
["pkc"] = {"Paekche"},
["pkg"] = {"Pak-Tong"},
["pkh"] = {"Pankhu"},
["pkn"] = {"Pakanha"},
["pko"] = {"Pökoot"},
["pkp"] = {"Pukapuka"},
["pkr"] = {"Attapady Kurumba"},
["pks"] = {"Pakistan Sign Language"},
["pkt"] = {"Maleng"},
["pku"] = {"Paku"},
["pla"] = {"Miani"},
["plb"] = {"Polonombauk"},
["plc"] = {"Central Palawano"},
["pld"] = {"Polari"},
["ple"] = {"Palu'e"},
["plf"] = {"Central Malayo-Polynesian languages"},
["plg"] = {"Pilagá"},
["plh"] = {"Paulohi"},
["plk"] = {"Kohistani Shina"},
["pll"] = {"Shwe Palaung"},
["pln"] = {"Palenquero"},
["plo"] = {"Oluta Popoluca"},
["plq"] = {"Palaic"},
["plr"] = {"Palaka Senoufo"},
["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"},
["plt"] = {"Plateau Malagasy"},
["plu"] = {"Palikúr"},
["plv"] = {"Southwest Palawano"},
["plw"] = {"Brooke's Point Palawano"},
["ply"] = {"Bolyu"},
["plz"] = {"Paluan"},
["pma"] = {"Paama"},
["pmb"] = {"Pambia"},
["pmd"] = {"Pallanganmiddang"},
["pme"] = {"Pwaamei"},
["pmf"] = {"Pamona"},
["pmh"] = {"Māhārāṣṭri Prākrit"},
["pmi"] = {"Northern Pumi"},
["pmj"] = {"Southern Pumi"},
["pml"] = {"Lingua Franca"},
["pmm"] = {"Pomo"},
["pmn"] = {"Pam"},
["pmo"] = {"Pom"},
["pmq"] = {"Northern Pame"},
["pmr"] = {"Paynamar"},
["pms"] = {"Piemontese"},
["pmt"] = {"Tuamotuan"},
["pmw"] = {"Plains Miwok"},
["pmx"] = {"Poumei Naga"},
["pmy"] = {"Papuan Malay"},
["pmz"] = {"Southern Pame"},
["pna"] = {"Punan Bah-Biau"},
["pnb"] = {"Western Panjabi"},
["pnc"] = {"Pannei"},
["pnd"] = {"Mpinda"},
["pne"] = {"Western Penan"},
["png"] = {"Pangu", "Pongu"},
["pnh"] = {"Penrhyn"},
["pni"] = {"Aoheng"},
["pnj"] = {"Pinjarup"},
["pnk"] = {"Paunaka"},
["pnl"] = {"Paleni"},
["pnm"] = {"Punan Batu 1"},
["pnn"] = {"Pinai-Hagahai"},
["pno"] = {"Panobo"},
["pnp"] = {"Pancana"},
["pnq"] = {"Pana (Burkina Faso)"},
["pnr"] = {"Panim"},
["pns"] = {"Ponosakan"},
["pnt"] = {"Pontic"},
["pnu"] = {"Jiongnai Bunu"},
["pnv"] = {"Pinigura"},
["pnw"] = {"Banyjima", "Panytyima"},
["pnx"] = {"Phong-Kniang"},
["pny"] = {"Pinyin"},
["pnz"] = {"Pana (Central African Republic)"},
["poc"] = {"Poqomam"},
["poe"] = {"San Juan Atzingo Popoloca"},
["pof"] = {"Poke"},
["pog"] = {"Potiguára"},
["poh"] = {"Poqomchi'"},
["poi"] = {"Highland Popoluca"},
["pok"] = {"Pokangá"},
["pom"] = {"Southeastern Pomo"},
["pon"] = {"Pohnpeian"},
["poo"] = {"Central Pomo"},
["pop"] = {"Pwapwâ"},
["poq"] = {"Texistepec Popoluca"},
["pos"] = {"Sayula Popoluca"},
["pot"] = {"Potawatomi"},
["pov"] = {"Upper Guinea Crioulo"},
["pow"] = {"San Felipe Otlaltepec Popoloca"},
["pox"] = {"Polabian"},
["poy"] = {"Pogolo"},
["poz"] = {"Malayo-Polynesian languages"},
["ppe"] = {"Papi"},
["ppi"] = {"Paipai"},
["ppk"] = {"Uma"},
["ppl"] = {"Pipil", "Nicarao"},
["ppm"] = {"Papuma"},
["ppn"] = {"Papapana"},
["ppo"] = {"Folopa"},
["ppp"] = {"Pelende"},
["ppq"] = {"Pei"},
["pps"] = {"San Luís Temalacayuca Popoloca"},
["ppt"] = {"Pare"},
["ppu"] = {"Papora"},
["pqa"] = {"Pa'a"},
["pqe"] = {"Eastern Malayo-Polynesian languages"},
["pqm"] = {"Malecite-Passamaquoddy"},
["pqw"] = {"Western Malayo-Polynesian languages"},
["pra"] = {"Prakrit languages"},
["prc"] = {"Parachi"},
["prd"] = {"Parsi-Dari"},
["pre"] = {"Principense"},
["prf"] = {"Paranan"},
["prg"] = {"Prussian"},
["prh"] = {"Porohanon"},
["pri"] = {"Paicî"},
["prk"] = {"Parauk"},
["prl"] = {"Peruvian Sign Language"},
["prm"] = {"Kibiri"},
["prn"] = {"Prasuni"},
["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"},
["prq"] = {"Ashéninka Perené"},
["prr"] = {"Puri"},
["prs"] = {"Dari", "Afghan Persian"},
["prt"] = {"Phai"},
["pru"] = {"Puragi"},
["prw"] = {"Parawen"},
["prx"] = {"Purik"},
["prz"] = {"Providencia Sign Language"},
["psa"] = {"Asue Awyu"},
["psc"] = {"Iranian Sign Language", "Persian Sign Language"},
["psd"] = {"Plains Indian Sign Language"},
["pse"] = {"Central Malay"},
["psg"] = {"Penang Sign Language"},
["psh"] = {"Southwest Pashai", "Southwest Pashayi"},
["psi"] = {"Southeast Pashai", "Southeast Pashayi"},
["psl"] = {"Puerto Rican Sign Language"},
["psm"] = {"Pauserna"},
["psn"] = {"Panasuan"},
["pso"] = {"Polish Sign Language"},
["psp"] = {"Philippine Sign Language"},
["psq"] = {"Pasi"},
["psr"] = {"Portuguese Sign Language"},
["pss"] = {"Kaulong"},
["pst"] = {"Central Pashto"},
["psu"] = {"Sauraseni Prākrit"},
["psw"] = {"Port Sandwich"},
["psy"] = {"Piscataway"},
["pta"] = {"Pai Tavytera"},
["pth"] = {"Pataxó Hã-Ha-Hãe"},
["pti"] = {"Pindiini", "Wangkatha"},
["ptn"] = {"Patani"},
["pto"] = {"Zo'é"},
["ptp"] = {"Patep"},
["ptq"] = {"Pattapu"},
["ptr"] = {"Piamatsina"},
["ptt"] = {"Enrekang"},
["ptu"] = {"Bambam"},
["ptv"] = {"Port Vato"},
["ptw"] = {"Pentlatch"},
["pty"] = {"Pathiya"},
["pua"] = {"Western Highland Purepecha"},
["pub"] = {"Purum"},
["puc"] = {"Punan Merap"},
["pud"] = {"Punan Aput"},
["pue"] = {"Puelche"},
["puf"] = {"Punan Merah"},
["pug"] = {"Phuie"},
["pui"] = {"Puinave"},
["puj"] = {"Punan Tubu"},
["pum"] = {"Puma"},
["puo"] = {"Puoc"},
["pup"] = {"Pulabu"},
["puq"] = {"Puquina"},
["pur"] = {"Puruborá"},
["put"] = {"Putoh"},
["puu"] = {"Punu"},
["puw"] = {"Puluwatese"},
["pux"] = {"Puare"},
["puy"] = {"Purisimeño"},
["pwa"] = {"Pawaia"},
["pwb"] = {"Panawa"},
["pwg"] = {"Gapapaiwa"},
["pwi"] = {"Patwin"},
["pwm"] = {"Molbog"},
["pwn"] = {"Paiwan"},
["pwo"] = {"Pwo Western Karen"},
["pwr"] = {"Powari"},
["pww"] = {"Pwo Northern Karen"},
["pxm"] = {"Quetzaltepec Mixe"},
["pye"] = {"Pye Krumen"},
["pym"] = {"Fyam"},
["pyn"] = {"Poyanáwa"},
["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"},
["pyu"] = {"Puyuma"},
["pyx"] = {"Pyu (Myanmar)"},
["pyy"] = {"Pyen"},
["pze"] = {"Pesse"},
["pzh"] = {"Pazeh"},
["pzn"] = {"Jejara Naga", "Para Naga"},
["qua"] = {"Quapaw"},
["qub"] = {"Huallaga Huánuco Quechua"},
["quc"] = {"K'iche'", "Quiché"},
["qud"] = {"Calderón Highland Quichua"},
["quf"] = {"Lambayeque Quechua"},
["qug"] = {"Chimborazo Highland Quichua"},
["quh"] = {"South Bolivian Quechua"},
["qui"] = {"Quileute"},
["quk"] = {"Chachapoyas Quechua"},
["qul"] = {"North Bolivian Quechua"},
["qum"] = {"Sipacapense"},
["qun"] = {"Quinault"},
["qup"] = {"Southern Pastaza Quechua"},
["quq"] = {"Quinqui"},
["qur"] = {"Yanahuanca Pasco Quechua"},
["qus"] = {"Santiago del Estero Quichua"},
["quv"] = {"Sacapulteco"},
["quw"] = {"Tena Lowland Quichua"},
["qux"] = {"Yauyos Quechua"},
["quy"] = {"Ayacucho Quechua"},
["quz"] = {"Cusco Quechua"},
["qva"] = {"Ambo-Pasco Quechua"},
["qvc"] = {"Cajamarca Quechua"},
["qve"] = {"Eastern Apurímac Quechua"},
["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"},
["qvi"] = {"Imbabura Highland Quichua"},
["qvj"] = {"Loja Highland Quichua"},
["qvl"] = {"Cajatambo North Lima Quechua"},
["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"},
["qvn"] = {"North Junín Quechua"},
["qvo"] = {"Napo Lowland Quechua"},
["qvp"] = {"Pacaraos Quechua"},
["qvs"] = {"San Martín Quechua"},
["qvw"] = {"Huaylla Wanca Quechua"},
["qvy"] = {"Queyu"},
["qvz"] = {"Northern Pastaza Quichua"},
["qwa"] = {"Corongo Ancash Quechua"},
["qwc"] = {"Classical Quechua"},
["qwe"] = {"Quechuan (family)"},
["qwh"] = {"Huaylas Ancash Quechua"},
["qwm"] = {"Kuman (Russia)"},
["qws"] = {"Sihuas Ancash Quechua"},
["qwt"] = {"Kwalhioqua-Tlatskanai"},
["qxa"] = {"Chiquián Ancash Quechua"},
["qxc"] = {"Chincha Quechua"},
["qxh"] = {"Panao Huánuco Quechua"},
["qxl"] = {"Salasaca Highland Quichua"},
["qxn"] = {"Northern Conchucos Ancash Quechua"},
["qxo"] = {"Southern Conchucos Ancash Quechua"},
["qxp"] = {"Puno Quechua"},
["qxq"] = {"Qashqa'i"},
["qxr"] = {"Cañar Highland Quichua"},
["qxs"] = {"Southern Qiang"},
["qxt"] = {"Santa Ana de Tusi Pasco Quechua"},
["qxu"] = {"Arequipa-La Unión Quechua"},
["qxw"] = {"Jauja Wanca Quechua"},
["qya"] = {"Quenya"},
["qyp"] = {"Quiripi"},
["raa"] = {"Dungmali"},
["rab"] = {"Camling"},
["rac"] = {"Rasawa"},
["rad"] = {"Rade"},
["raf"] = {"Western Meohang"},
["rag"] = {"Logooli", "Lulogooli"},
["rah"] = {"Rabha"},
["rai"] = {"Ramoaaina"},
["raj"] = {"Rajasthani"},
["rak"] = {"Tulu-Bohuai"},
["ral"] = {"Ralte"},
["ram"] = {"Canela"},
["ran"] = {"Riantana"},
["rao"] = {"Rao"},
["rap"] = {"Rapanui"},
["raq"] = {"Saam"},
["rar"] = {"Rarotongan", "Cook Islands Maori"},
["ras"] = {"Tegali"},
["rat"] = {"Razajerdi"},
["rau"] = {"Raute"},
["rav"] = {"Sampang"},
["raw"] = {"Rawang"},
["rax"] = {"Rang"},
["ray"] = {"Rapa"},
["raz"] = {"Rahambuu"},
["rbb"] = {"Rumai Palaung"},
["rbk"] = {"Northern Bontok"},
["rbl"] = {"Miraya Bikol"},
["rbp"] = {"Barababaraba"},
["rcf"] = {"Réunion Creole French"},
["rdb"] = {"Rudbari"},
["rea"] = {"Rerau"},
["reb"] = {"Rembong"},
["ree"] = {"Rejang Kayan"},
["reg"] = {"Kara (Tanzania)"},
["rei"] = {"Reli"},
["rej"] = {"Rejang"},
["rel"] = {"Rendille"},
["rem"] = {"Remo"},
["ren"] = {"Rengao"},
["rer"] = {"Rer Bare"},
["res"] = {"Reshe"},
["ret"] = {"Retta"},
["rey"] = {"Reyesano"},
["rga"] = {"Roria"},
["rge"] = {"Romano-Greek"},
["rgk"] = {"Rangkas"},
["rgn"] = {"Romagnol"},
["rgr"] = {"Resígaro"},
["rgs"] = {"Southern Roglai"},
["rgu"] = {"Ringgou"},
["rhg"] = {"Rohingya"},
["rhp"] = {"Yahang"},
["ria"] = {"Riang (India)"},
["rib"] = {"Bribri Sign Language"},
["rif"] = {"Tarifit"},
["ril"] = {"Riang Lang", "Riang (Myanmar)"},
["rim"] = {"Nyaturu"},
["rin"] = {"Nungu"},
["rir"] = {"Ribun"},
["rit"] = {"Ritharrngu"},
["riu"] = {"Riung"},
["rjg"] = {"Rajong"},
["rji"] = {"Raji"},
["rjs"] = {"Rajbanshi"},
["rka"] = {"Kraol"},
["rkb"] = {"Rikbaktsa"},
["rkh"] = {"Rakahanga-Manihiki"},
["rki"] = {"Rakhine"},
["rkm"] = {"Marka"},
["rkt"] = {"Rangpuri", "Kamta"},
["rkw"] = {"Arakwal"},
["rma"] = {"Rama"},
["rmb"] = {"Rembarrnga"},
["rmc"] = {"Carpathian Romani"},
["rmd"] = {"Traveller Danish"},
["rme"] = {"Angloromani"},
["rmf"] = {"Kalo Finnish Romani"},
["rmg"] = {"Traveller Norwegian"},
["rmh"] = {"Murkim"},
["rmi"] = {"Lomavren"},
["rmk"] = {"Romkun"},
["rml"] = {"Baltic Romani"},
["rmm"] = {"Roma"},
["rmn"] = {"Balkan Romani"},
["rmo"] = {"Sinte Romani"},
["rmp"] = {"Rempi"},
["rmq"] = {"Caló"},
["rms"] = {"Romanian Sign Language"},
["rmt"] = {"Domari"},
["rmu"] = {"Tavringer Romani"},
["rmv"] = {"Romanova"},
["rmw"] = {"Welsh Romani"},
["rmx"] = {"Romam"},
["rmy"] = {"Vlax Romani"},
["rmz"] = {"Marma"},
["rnb"] = {"Brunca Sign Language"},
["rnd"] = {"Ruund"},
["rng"] = {"Ronga"},
["rnl"] = {"Ranglong"},
["rnn"] = {"Roon"},
["rnp"] = {"Rongpo"},
["rnr"] = {"Nari Nari"},
["rnw"] = {"Rungwa"},
["roa"] = {"Romance languages"},
["rob"] = {"Tae'"},
["roc"] = {"Cacgia Roglai"},
["rod"] = {"Rogo"},
["roe"] = {"Ronji"},
["rof"] = {"Rombo"},
["rog"] = {"Northern Roglai"},
["rol"] = {"Romblomanon"},
["rom"] = {"Romany"},
["roo"] = {"Rotokas"},
["rop"] = {"Kriol"},
["ror"] = {"Rongga"},
["rou"] = {"Runga"},
["row"] = {"Dela-Oenale"},
["rpn"] = {"Repanbitip"},
["rpt"] = {"Rapting"},
["rri"] = {"Ririo"},
["rro"] = {"Waima"},
["rrt"] = {"Arritinngithigh"},
["rsb"] = {"Romano-Serbian"},
["rsk"] = {"Ruthenian", "Rusnak"},
["rsl"] = {"Russian Sign Language"},
["rsm"] = {"Miriwoong Sign Language"},
["rsn"] = {"Rwandan Sign Language"},
["rsw"] = {"Rishiwa"},
["rtc"] = {"Rungtu Chin"},
["rth"] = {"Ratahan"},
["rtm"] = {"Rotuman"},
["rts"] = {"Yurats"},
["rtw"] = {"Rathawi"},
["rub"] = {"Gungu"},
["ruc"] = {"Ruuli"},
["rue"] = {"Rusyn"},
["ruf"] = {"Luguru"},
["rug"] = {"Roviana"},
["ruh"] = {"Ruga"},
["rui"] = {"Rufiji"},
["ruk"] = {"Che"},
["ruo"] = {"Istro Romanian"},
["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"},
["ruq"] = {"Megleno Romanian"},
["rut"] = {"Rutul"},
["ruu"] = {"Lanas Lobu"},
["ruy"] = {"Mala (Nigeria)"},
["ruz"] = {"Ruma"},
["rwa"] = {"Rawo"},
["rwk"] = {"Rwa"},
["rwl"] = {"Ruwila"},
["rwm"] = {"Amba (Uganda)"},
["rwo"] = {"Rawa"},
["rwr"] = {"Marwari (India)"},
["rxd"] = {"Ngardi"},
["rxw"] = {"Karuwali", "Garuwali"},
["ryn"] = {"Northern Amami-Oshima"},
["rys"] = {"Yaeyama"},
["ryu"] = {"Central Okinawan"},
["rzh"] = {"Rāziḥī"},
["saa"] = {"Saba"},
["sab"] = {"Buglere"},
["sac"] = {"Meskwaki"},
["sad"] = {"Sandawe"},
["sae"] = {"Sabanê"},
["saf"] = {"Safaliba"},
["sah"] = {"Yakut"},
["sai"] = {"South American Indian languages"},
["saj"] = {"Sahu"},
["sak"] = {"Sake"},
["sal"] = {"Salishan languages"},
["sam"] = {"Samaritan Aramaic"},
["sao"] = {"Sause"},
["saq"] = {"Samburu"},
["sar"] = {"Saraveca"},
["sas"] = {"Sasak"},
["sat"] = {"Santali"},
["sau"] = {"Saleman"},
["sav"] = {"Saafi-Saafi"},
["saw"] = {"Sawi"},
["sax"] = {"Sa"},
["say"] = {"Saya"},
["saz"] = {"Saurashtra"},
["sba"] = {"Ngambay"},
["sbb"] = {"Simbo"},
["sbc"] = {"Kele (Papua New Guinea)"},
["sbd"] = {"Southern Samo"},
["sbe"] = {"Saliba"},
["sbf"] = {"Chabu", "Shabo"},
["sbg"] = {"Seget"},
["sbh"] = {"Sori-Harengan"},
["sbi"] = {"Seti"},
["sbj"] = {"Surbakhal"},
["sbk"] = {"Safwa"},
["sbl"] = {"Botolan Sambal"},
["sbm"] = {"Sagala"},
["sbn"] = {"Sindhi Bhil"},
["sbo"] = {"Sabüm"},
["sbp"] = {"Sangu (Tanzania)"},
["sbq"] = {"Sileibi"},
["sbr"] = {"Sembakung Murut"},
["sbs"] = {"Subiya"},
["sbt"] = {"Kimki"},
["sbu"] = {"Stod Bhoti"},
["sbv"] = {"Sabine"},
["sbw"] = {"Simba"},
["sbx"] = {"Seberuang"},
["sby"] = {"Soli"},
["sbz"] = {"Sara Kaba"},
["scb"] = {"Chut"},
["sce"] = {"Dongxiang"},
["scf"] = {"San Miguel Creole French"},
["scg"] = {"Sanggau"},
["sch"] = {"Sakachep"},
["sci"] = {"Sri Lankan Creole Malay"},
["sck"] = {"Sadri"},
["scl"] = {"Shina"},
["scn"] = {"Sicilian"},
["sco"] = {"Scots"},
["scp"] = {"Hyolmo", "Helambu Sherpa"},
["scq"] = {"Sa'och"},
["scs"] = {"North Slavey"},
["sct"] = {"Southern Katang"},
["scu"] = {"Shumcho"},
["scv"] = {"Sheni"},
["scw"] = {"Sha"},
["scx"] = {"Sicel"},
["sda"] = {"Toraja-Sa'dan"},
["sdb"] = {"Shabak"},
["sdc"] = {"Sassarese Sardinian"},
["sde"] = {"Surubu"},
["sdf"] = {"Sarli"},
["sdg"] = {"Savi"},
["sdh"] = {"Southern Kurdish"},
["sdj"] = {"Suundi"},
["sdk"] = {"Sos Kundi"},
["sdl"] = {"Saudi Arabian Sign Language"},
["sdn"] = {"Gallurese Sardinian"},
["sdo"] = {"Bukar-Sadung Bidayuh"},
["sdp"] = {"Sherdukpen"},
["sdq"] = {"Semandang"},
["sdr"] = {"Oraon Sadri"},
["sds"] = {"Sened"},
["sdt"] = {"Shuadit"},
["sdu"] = {"Sarudu"},
["sdv"] = {"Eastern Sudanic languages"},
["sdx"] = {"Sibu Melanau"},
["sdz"] = {"Sallands"},
["sea"] = {"Semai"},
["seb"] = {"Shempire Senoufo"},
["sec"] = {"Sechelt"},
["sed"] = {"Sedang"},
["see"] = {"Seneca"},
["sef"] = {"Cebaara Senoufo"},
["seg"] = {"Segeju"},
["seh"] = {"Sena"},
["sei"] = {"Seri"},
["sej"] = {"Sene"},
["sek"] = {"Sekani"},
["sel"] = {"Selkup"},
["sem"] = {"Semitic languages"},
["sen"] = {"Nanerigé Sénoufo"},
["seo"] = {"Suarmin"},
["sep"] = {"Sìcìté Sénoufo"},
["seq"] = {"Senara Sénoufo"},
["ser"] = {"Serrano"},
["ses"] = {"Koyraboro Senni Songhai"},
["set"] = {"Sentani"},
["seu"] = {"Serui-Laut"},
["sev"] = {"Nyarafolo Senoufo"},
["sew"] = {"Sewa Bay"},
["sey"] = {"Secoya"},
["sez"] = {"Senthang Chin"},
["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"},
["sfe"] = {"Eastern Subanen"},
["sfm"] = {"Small Flowery Miao"},
["sfs"] = {"South African Sign Language"},
["sfw"] = {"Sehwi"},
["sga"] = {"Old Irish (to 900)"},
["sgb"] = {"Mag-antsi Ayta"},
["sgc"] = {"Kipsigis"},
["sgd"] = {"Surigaonon"},
["sge"] = {"Segai"},
["sgg"] = {"Swiss-German Sign Language"},
["sgh"] = {"Shughni"},
["sgi"] = {"Suga"},
["sgj"] = {"Surgujia"},
["sgk"] = {"Sangkong"},
["sgm"] = {"Singa"},
["sgn"] = {"Sign languages"},
["sgp"] = {"Singpho"},
["sgr"] = {"Sangisari"},
["sgs"] = {"Samogitian"},
["sgt"] = {"Brokpake"},
["sgu"] = {"Salas"},
["sgw"] = {"Sebat Bet Gurage"},
["sgx"] = {"Sierra Leone Sign Language"},
["sgy"] = {"Sanglechi"},
["sgz"] = {"Sursurunga"},
["sha"] = {"Shall-Zwall"},
["shb"] = {"Ninam"},
["shc"] = {"Sonde"},
["shd"] = {"Kundal Shahi"},
["she"] = {"Sheko"},
["shg"] = {"Shua"},
["shh"] = {"Shoshoni"},
["shi"] = {"Tachelhit"},
["shj"] = {"Shatt"},
["shk"] = {"Shilluk"},
["shl"] = {"Shendu"},
["shm"] = {"Shahrudi"},
["shn"] = {"Shan"},
["sho"] = {"Shanga"},
["shp"] = {"Shipibo-Conibo"},
["shq"] = {"Sala"},
["shr"] = {"Shi"},
["shs"] = {"Shuswap"},
["sht"] = {"Shasta"},
["shu"] = {"Chadian Arabic"},
["shv"] = {"Shehri"},
["shw"] = {"Shwai"},
["shx"] = {"She"},
["shy"] = {"Tachawit"},
["shz"] = {"Syenara Senoufo"},
["sia"] = {"Akkala Sami"},
["sib"] = {"Sebop"},
["sid"] = {"Sidamo"},
["sie"] = {"Simaa"},
["sif"] = {"Siamou"},
["sig"] = {"Paasaal"},
["sih"] = {"Zire", "Sîshëë"},
["sii"] = {"Shom Peng"},
["sij"] = {"Numbami"},
["sik"] = {"Sikiana"},
["sil"] = {"Tumulung Sisaala"},
["sim"] = {"Mende (Papua New Guinea)"},
["sio"] = {"Siouan languages"},
["sip"] = {"Sikkimese"},
["siq"] = {"Sonia"},
["sir"] = {"Siri"},
["sis"] = {"Siuslaw"},
["sit"] = {"Sino-Tibetan languages"},
["siu"] = {"Sinagen"},
["siv"] = {"Sumariup"},
["siw"] = {"Siwai"},
["six"] = {"Sumau"},
["siy"] = {"Sivandi"},
["siz"] = {"Siwi"},
["sja"] = {"Epena"},
["sjb"] = {"Sajau Basap"},
["sjd"] = {"Kildin Sami"},
["sje"] = {"Pite Sami"},
["sjg"] = {"Assangori"},
["sjk"] = {"Kemi Sami"},
["sjl"] = {"Sajalong", "Miji"},
["sjm"] = {"Mapun"},
["sjn"] = {"Sindarin"},
["sjo"] = {"Xibe"},
["sjp"] = {"Surjapuri"},
["sjr"] = {"Siar-Lak"},
["sjs"] = {"Senhaja De Srair"},
["sjt"] = {"Ter Sami"},
["sju"] = {"Ume Sami"},
["sjw"] = {"Shawnee"},
["ska"] = {"Skagit"},
["skb"] = {"Saek"},
["skc"] = {"Ma Manda"},
["skd"] = {"Southern Sierra Miwok"},
["ske"] = {"Seke (Vanuatu)"},
["skf"] = {"Sakirabiá"},
["skg"] = {"Sakalava Malagasy"},
["skh"] = {"Sikule"},
["ski"] = {"Sika"},
["skj"] = {"Seke (Nepal)"},
["skm"] = {"Kutong"},
["skn"] = {"Kolibugan Subanon"},
["sko"] = {"Seko Tengah"},
["skp"] = {"Sekapan"},
["skq"] = {"Sininkere"},
["skr"] = {"Saraiki", "Seraiki"},
["sks"] = {"Maia"},
["skt"] = {"Sakata"},
["sku"] = {"Sakao"},
["skv"] = {"Skou"},
["skw"] = {"Skepi Creole Dutch"},
["skx"] = {"Seko Padang"},
["sky"] = {"Sikaiana"},
["skz"] = {"Sekar"},
["sla"] = {"Slavic languages"},
["slc"] = {"Sáliba"},
["sld"] = {"Sissala"},
["sle"] = {"Sholaga"},
["slf"] = {"Swiss-Italian Sign Language"},
["slg"] = {"Selungai Murut"},
["slh"] = {"Southern Puget Sound Salish"},
["sli"] = {"Lower Silesian"},
["slj"] = {"Salumá"},
["sll"] = {"Salt-Yui"},
["slm"] = {"Pangutaran Sama"},
["sln"] = {"Salinan"},
["slp"] = {"Lamaholot"},
["slr"] = {"Salar"},
["sls"] = {"Singapore Sign Language"},
["slt"] = {"Sila"},
["slu"] = {"Selaru"},
["slw"] = {"Sialum"},
["slx"] = {"Salampasu"},
["sly"] = {"Selayar"},
["slz"] = {"Ma'ya"},
["sma"] = {"Southern Sami"},
["smb"] = {"Simbari"},
["smc"] = {"Som"},
["smf"] = {"Auwe"},
["smg"] = {"Simbali"},
["smh"] = {"Samei"},
["smi"] = {"Sami languages"},
["smj"] = {"Lule Sami"},
["smk"] = {"Bolinao"},
["sml"] = {"Central Sama"},
["smm"] = {"Musasa"},
["smn"] = {"Inari Sami"},
["smp"] = {"Samaritan"},
["smq"] = {"Samo"},
["smr"] = {"Simeulue"},
["sms"] = {"Skolt Sami"},
["smt"] = {"Simte"},
["smu"] = {"Somray"},
["smv"] = {"Samvedi"},
["smw"] = {"Sumbawa"},
["smx"] = {"Samba"},
["smy"] = {"Semnani"},
["smz"] = {"Simeku"},
["snc"] = {"Sinaugoro"},
["sne"] = {"Bau Bidayuh"},
["snf"] = {"Noon"},
["sng"] = {"Sanga (Democratic Republic of Congo)"},
["sni"] = {"Sensi"},
["snj"] = {"Riverain Sango"},
["snk"] = {"Soninke"},
["snl"] = {"Sangil"},
["snm"] = {"Southern Ma'di"},
["snn"] = {"Siona"},
["sno"] = {"Snohomish"},
["snp"] = {"Siane"},
["snq"] = {"Sangu (Gabon)"},
["snr"] = {"Sihan"},
["sns"] = {"South West Bay", "Nahavaq"},
["snu"] = {"Senggi", "Viid"},
["snv"] = {"Sa'ban"},
["snw"] = {"Selee"},
["snx"] = {"Sam"},
["sny"] = {"Saniyo-Hiyewe"},
["snz"] = {"Kou"},
["soa"] = {"Thai Song"},
["sob"] = {"Sobei"},
["soc"] = {"So (Democratic Republic of Congo)"},
["sod"] = {"Songoora"},
["soe"] = {"Songomeno"},
["sog"] = {"Sogdian"},
["soh"] = {"Aka"},
["soi"] = {"Sonha"},
["soj"] = {"Soi"},
["sok"] = {"Sokoro"},
["sol"] = {"Solos"},
["son"] = {"Songhai languages"},
["soo"] = {"Songo"},
["sop"] = {"Songe"},
["soq"] = {"Kanasi"},
["sor"] = {"Somrai"},
["sos"] = {"Seeku"},
["sou"] = {"Southern Thai"},
["sov"] = {"Sonsorol"},
["sow"] = {"Sowanda"},
["sox"] = {"Swo"},
["soy"] = {"Miyobe"},
["soz"] = {"Temi"},
["spb"] = {"Sepa (Indonesia)"},
["spc"] = {"Sapé"},
["spd"] = {"Saep"},
["spe"] = {"Sepa (Papua New Guinea)"},
["spg"] = {"Sian"},
["spi"] = {"Saponi"},
["spk"] = {"Sengo"},
["spl"] = {"Selepet"},
["spm"] = {"Akukem"},
["spn"] = {"Sanapaná"},
["spo"] = {"Spokane"},
["spp"] = {"Supyire Senoufo"},
["spq"] = {"Loreto-Ucayali Spanish"},
["spr"] = {"Saparua"},
["sps"] = {"Saposa"},
["spt"] = {"Spiti Bhoti"},
["spu"] = {"Sapuan"},
["spv"] = {"Sambalpuri", "Kosli"},
["spx"] = {"South Picene"},
["spy"] = {"Sabaot"},
["sqa"] = {"Shama-Sambuga"},
["sqh"] = {"Shau"},
["sqj"] = {"Albanian languages"},
["sqk"] = {"Albanian Sign Language"},
["sqm"] = {"Suma"},
["sqn"] = {"Susquehannock"},
["sqo"] = {"Sorkhei"},
["sqq"] = {"Sou"},
["sqr"] = {"Siculo Arabic"},
["sqs"] = {"Sri Lankan Sign Language"},
["sqt"] = {"Soqotri"},
["squ"] = {"Squamish"},
["sqx"] = {"Kufr Qassem Sign Language (KQSL)"},
["sra"] = {"Saruga"},
["srb"] = {"Sora"},
["src"] = {"Logudorese Sardinian"},
["sre"] = {"Sara"},
["srf"] = {"Nafi"},
["srg"] = {"Sulod"},
["srh"] = {"Sarikoli"},
["sri"] = {"Siriano"},
["srk"] = {"Serudung Murut"},
["srl"] = {"Isirawa"},
["srm"] = {"Saramaccan"},
["srn"] = {"Sranan Tongo"},
["sro"] = {"Campidanese Sardinian"},
["srq"] = {"Sirionó"},
["srr"] = {"Serer"},
["srs"] = {"Sarsi"},
["srt"] = {"Sauri"},
["sru"] = {"Suruí"},
["srv"] = {"Southern Sorsoganon"},
["srw"] = {"Serua"},
["srx"] = {"Sirmauri"},
["sry"] = {"Sera"},
["srz"] = {"Shahmirzadi"},
["ssa"] = {"Nilo-Saharan languages"},
["ssb"] = {"Southern Sama"},
["ssc"] = {"Suba-Simbiti"},
["ssd"] = {"Siroi"},
["sse"] = {"Balangingi", "Bangingih Sama"},
["ssf"] = {"Thao"},
["ssg"] = {"Seimat"},
["ssh"] = {"Shihhi Arabic"},
["ssi"] = {"Sansi"},
["ssj"] = {"Sausi"},
["ssk"] = {"Sunam"},
["ssl"] = {"Western Sisaala"},
["ssm"] = {"Semnam"},
["ssn"] = {"Waata"},
["sso"] = {"Sissano"},
["ssp"] = {"Spanish Sign Language"},
["ssq"] = {"So'a"},
["ssr"] = {"Swiss-French Sign Language"},
["sss"] = {"Sô"},
["sst"] = {"Sinasina"},
["ssu"] = {"Susuami"},
["ssv"] = {"Shark Bay"},
["ssx"] = {"Samberigi"},
["ssy"] = {"Saho"},
["ssz"] = {"Sengseng"},
["sta"] = {"Settla"},
["stb"] = {"Northern Subanen"},
["std"] = {"Sentinel"},
["ste"] = {"Liana-Seti"},
["stf"] = {"Seta"},
["stg"] = {"Trieng"},
["sth"] = {"Shelta"},
["sti"] = {"Bulo Stieng"},
["stj"] = {"Matya Samo"},
["stk"] = {"Arammba"},
["stl"] = {"Stellingwerfs"},
["stm"] = {"Setaman"},
["stn"] = {"Owa"},
["sto"] = {"Stoney"},
["stp"] = {"Southeastern Tepehuan"},
["stq"] = {"Saterfriesisch"},
["str"] = {"Straits Salish"},
["sts"] = {"Shumashti"},
["stt"] = {"Budeh Stieng"},
["stu"] = {"Samtao"},
["stv"] = {"Silt'e"},
["stw"] = {"Satawalese"},
["sty"] = {"Siberian Tatar"},
["sua"] = {"Sulka"},
["sub"] = {"Suku"},
["suc"] = {"Western Subanon"},
["sue"] = {"Suena"},
["sug"] = {"Suganga"},
["sui"] = {"Suki"},
["suj"] = {"Shubi"},
["suk"] = {"Sukuma"},
["suo"] = {"Bouni"},
["suq"] = {"Tirmaga-Chai Suri", "Suri"},
["sur"] = {"Mwaghavul"},
["sus"] = {"Susu"},
["sut"] = {"Subtiaba"},
["suv"] = {"Puroik"},
["suw"] = {"Sumbwa"},
["sux"] = {"Sumerian"},
["suy"] = {"Suyá"},
["suz"] = {"Sunwar"},
["sva"] = {"Svan"},
["svb"] = {"Ulau-Suain"},
["svc"] = {"Vincentian Creole English"},
["sve"] = {"Serili"},
["svk"] = {"Slovakian Sign Language"},
["svm"] = {"Slavomolisano"},
["svs"] = {"Savosavo"},
["svx"] = {"Skalvian"},
["swb"] = {"Maore Comorian"},
["swc"] = {"Congo Swahili"},
["swf"] = {"Sere"},
["swg"] = {"Swabian"},
["swh"] = {"Swahili (individual language)", "Kiswahili"},
["swi"] = {"Sui"},
["swj"] = {"Sira"},
["swk"] = {"Malawi Sena"},
["swl"] = {"Swedish Sign Language"},
["swm"] = {"Samosa"},
["swn"] = {"Sawknah"},
["swo"] = {"Shanenawa"},
["swp"] = {"Suau"},
["swq"] = {"Sharwa"},
["swr"] = {"Saweru"},
["sws"] = {"Seluwasan"},
["swt"] = {"Sawila"},
["swu"] = {"Suwawa"},
["swv"] = {"Shekhawati"},
["sww"] = {"Sowa"},
["swx"] = {"Suruahá"},
["swy"] = {"Sarua"},
["sxb"] = {"Suba"},
["sxc"] = {"Sicanian"},
["sxe"] = {"Sighu"},
["sxg"] = {"Shuhi", "Shixing"},
["sxk"] = {"Southern Kalapuya"},
["sxl"] = {"Selian"},
["sxm"] = {"Samre"},
["sxn"] = {"Sangir"},
["sxo"] = {"Sorothaptic"},
["sxr"] = {"Saaroa"},
["sxs"] = {"Sasaru"},
["sxu"] = {"Upper Saxon"},
["sxw"] = {"Saxwe Gbe"},
["sya"] = {"Siang"},
["syb"] = {"Central Subanen"},
["syc"] = {"Classical Syriac"},
["syd"] = {"Samoyedic languages"},
["syi"] = {"Seki"},
["syk"] = {"Sukur"},
["syl"] = {"Sylheti"},
["sym"] = {"Maya Samo"},
["syn"] = {"Senaya"},
["syo"] = {"Suoy"},
["syr"] = {"Syriac"},
["sys"] = {"Sinyar"},
["syw"] = {"Kagate"},
["syx"] = {"Samay"},
["syy"] = {"Al-Sayyid Bedouin Sign Language"},
["sza"] = {"Semelai"},
["szb"] = {"Ngalum"},
["szc"] = {"Semaq Beri"},
["sze"] = {"Seze"},
["szg"] = {"Sengele"},
["szl"] = {"Silesian"},
["szn"] = {"Sula"},
["szp"] = {"Suabo"},
["szs"] = {"Solomon Islands Sign Language"},
["szv"] = {"Isu (Fako Division)"},
["szw"] = {"Sawai"},
["szy"] = {"Sakizaya"},
["taa"] = {"Lower Tanana"},
["tab"] = {"Tabassaran"},
["tac"] = {"Lowland Tarahumara"},
["tad"] = {"Tause"},
["tae"] = {"Tariana"},
["taf"] = {"Tapirapé"},
["tag"] = {"Tagoi"},
["tai"] = {"Tai languages"},
["taj"] = {"Eastern Tamang"},
["tak"] = {"Tala"},
["tal"] = {"Tal"},
["tan"] = {"Tangale"},
["tao"] = {"Yami"},
["tap"] = {"Taabwa"},
["taq"] = {"Tamasheq"},
["tar"] = {"Central Tarahumara"},
["tas"] = {"Tay Boi"},
["tau"] = {"Upper Tanana"},
["tav"] = {"Tatuyo"},
["taw"] = {"Tai"},
["tax"] = {"Tamki"},
["tay"] = {"Atayal"},
["taz"] = {"Tocho"},
["tba"] = {"Aikanã"},
["tbc"] = {"Takia"},
["tbd"] = {"Kaki Ae"},
["tbe"] = {"Tanimbili"},
["tbf"] = {"Mandara"},
["tbg"] = {"North Tairora"},
["tbh"] = {"Dharawal", "Thurawal"},
["tbi"] = {"Gaam"},
["tbj"] = {"Tiang"},
["tbk"] = {"Calamian Tagbanwa"},
["tbl"] = {"Tboli"},
["tbm"] = {"Tagbu"},
["tbn"] = {"Barro Negro Tunebo"},
["tbo"] = {"Tawala"},
["tbp"] = {"Taworta", "Diebroud"},
["tbq"] = {"Tibeto-Burman languages"},
["tbr"] = {"Tumtum"},
["tbs"] = {"Tanguat"},
["tbt"] = {"Tembo (Kitembo)"},
["tbu"] = {"Tubar"},
["tbv"] = {"Tobo"},
["tbw"] = {"Tagbanwa"},
["tbx"] = {"Kapin"},
["tby"] = {"Tabaru"},
["tbz"] = {"Ditammari"},
["tca"] = {"Ticuna"},
["tcb"] = {"Tanacross"},
["tcc"] = {"Datooga"},
["tcd"] = {"Tafi"},
["tce"] = {"Southern Tutchone"},
["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"},
["tcg"] = {"Tamagario"},
["tch"] = {"Turks And Caicos Creole English"},
["tci"] = {"Wára"},
["tck"] = {"Tchitchege"},
["tcl"] = {"Taman (Myanmar)"},
["tcm"] = {"Tanahmerah"},
["tcn"] = {"Tichurong"},
["tco"] = {"Taungyo"},
["tcp"] = {"Tawr Chin"},
["tcq"] = {"Kaiy"},
["tcs"] = {"Torres Strait Creole", "Yumplatok"},
["tct"] = {"T'en"},
["tcu"] = {"Southeastern Tarahumara"},
["tcw"] = {"Tecpatlán Totonac"},
["tcx"] = {"Toda"},
["tcy"] = {"Tulu"},
["tcz"] = {"Thado Chin"},
["tda"] = {"Tagdal"},
["tdb"] = {"Panchpargania"},
["tdc"] = {"Emberá-Tadó"},
["tdd"] = {"Tai Nüa"},
["tde"] = {"Tiranige Diga Dogon"},
["tdf"] = {"Talieng"},
["tdg"] = {"Western Tamang"},
["tdh"] = {"Thulung"},
["tdi"] = {"Tomadino"},
["tdj"] = {"Tajio"},
["tdk"] = {"Tambas"},
["tdl"] = {"Sur"},
["tdm"] = {"Taruma"},
["tdn"] = {"Tondano"},
["tdo"] = {"Teme"},
["tdq"] = {"Tita"},
["tdr"] = {"Todrah"},
["tds"] = {"Doutai"},
["tdt"] = {"Tetun Dili"},
["tdv"] = {"Toro"},
["tdx"] = {"Tandroy-Mahafaly Malagasy"},
["tdy"] = {"Tadyawan"},
["tea"] = {"Temiar"},
["teb"] = {"Tetete"},
["tec"] = {"Terik"},
["ted"] = {"Tepo Krumen"},
["tee"] = {"Huehuetla Tepehua"},
["tef"] = {"Teressa"},
["teg"] = {"Teke-Tege"},
["teh"] = {"Tehuelche"},
["tei"] = {"Torricelli"},
["tek"] = {"Ibali Teke"},
["tem"] = {"Timne"},
["ten"] = {"Tama (Colombia)"},
["teo"] = {"Teso"},
["tep"] = {"Tepecano"},
["teq"] = {"Temein"},
["ter"] = {"Tereno"},
["tes"] = {"Tengger"},
["tet"] = {"Tetum"},
["teu"] = {"Soo"},
["tev"] = {"Teor"},
["tew"] = {"Tewa (USA)"},
["tex"] = {"Tennet"},
["tey"] = {"Tulishi"},
["tez"] = {"Tetserret"},
["tfi"] = {"Tofin Gbe"},
["tfn"] = {"Tanaina"},
["tfo"] = {"Tefaro"},
["tfr"] = {"Teribe"},
["tft"] = {"Ternate"},
["tga"] = {"Sagalla"},
["tgb"] = {"Tobilung"},
["tgc"] = {"Tigak"},
["tgd"] = {"Ciwogai"},
["tge"] = {"Eastern Gorkha Tamang"},
["tgf"] = {"Chalikha"},
["tgh"] = {"Tobagonian Creole English"},
["tgi"] = {"Lawunuia"},
["tgj"] = {"Tagin"},
["tgn"] = {"Tandaganon"},
["tgo"] = {"Sudest"},
["tgp"] = {"Tangoa"},
["tgq"] = {"Tring"},
["tgr"] = {"Tareng"},
["tgs"] = {"Nume"},
["tgt"] = {"Central Tagbanwa"},
["tgu"] = {"Tanggu"},
["tgv"] = {"Tingui-Boto"},
["tgw"] = {"Tagwana Senoufo"},
["tgx"] = {"Tagish"},
["tgy"] = {"Togoyo"},
["tgz"] = {"Tagalaka"},
["thd"] = {"Kuuk Thaayorre", "Thayore"},
["the"] = {"Chitwania Tharu"},
["thf"] = {"Thangmi"},
["thh"] = {"Northern Tarahumara"},
["thi"] = {"Tai Long"},
["thk"] = {"Tharaka", "Kitharaka"},
["thl"] = {"Dangaura Tharu"},
["thm"] = {"Aheu"},
["thn"] = {"Thachanadan"},
["thp"] = {"Thompson"},
["thq"] = {"Kochila Tharu"},
["thr"] = {"Rana Tharu"},
["ths"] = {"Thakali"},
["tht"] = {"Tahltan"},
["thu"] = {"Thuri"},
["thv"] = {"Tahaggart Tamahaq"},
["thy"] = {"Tha"},
["thz"] = {"Tayart Tamajeq"},
["tia"] = {"Tidikelt Tamazight"},
["tic"] = {"Tira"},
["tif"] = {"Tifal"},
["tig"] = {"Tigre"},
["tih"] = {"Timugon Murut"},
["tii"] = {"Tiene"},
["tij"] = {"Tilung"},
["tik"] = {"Tikar"},
["til"] = {"Tillamook"},
["tim"] = {"Timbe"},
["tin"] = {"Tindi"},
["tio"] = {"Teop"},
["tip"] = {"Trimuris"},
["tiq"] = {"Tiéfo"},
["tis"] = {"Masadiit Itneg"},
["tit"] = {"Tinigua"},
["tiu"] = {"Adasen"},
["tiv"] = {"Tiv"},
["tiw"] = {"Tiwi"},
["tix"] = {"Southern Tiwa"},
["tiy"] = {"Tiruray"},
["tiz"] = {"Tai Hongjin"},
["tja"] = {"Tajuasohn"},
["tjg"] = {"Tunjung"},
["tji"] = {"Northern Tujia"},
["tjj"] = {"Tjungundji"},
["tjl"] = {"Tai Laing"},
["tjm"] = {"Timucua"},
["tjn"] = {"Tonjon"},
["tjo"] = {"Temacine Tamazight"},
["tjp"] = {"Tjupany"},
["tjs"] = {"Southern Tujia"},
["tju"] = {"Tjurruru"},
["tjw"] = {"Djabwurrung"},
["tka"] = {"Truká"},
["tkb"] = {"Buksa"},
["tkd"] = {"Tukudede"},
["tke"] = {"Takwane"},
["tkf"] = {"Tukumanféd"},
["tkg"] = {"Tesaka Malagasy"},
["tkl"] = {"Tokelau"},
["tkm"] = {"Takelma"},
["tkn"] = {"Toku-No-Shima"},
["tkp"] = {"Tikopia"},
["tkq"] = {"Tee"},
["tkr"] = {"Tsakhur"},
["tks"] = {"Takestani"},
["tkt"] = {"Kathoriya Tharu"},
["tku"] = {"Upper Necaxa Totonac"},
["tkv"] = {"Mur Pano"},
["tkw"] = {"Teanu"},
["tkx"] = {"Tangko"},
["tkz"] = {"Takua"},
["tla"] = {"Southwestern Tepehuan"},
["tlb"] = {"Tobelo"},
["tlc"] = {"Yecuatla Totonac"},
["tld"] = {"Talaud"},
["tlf"] = {"Telefol"},
["tlg"] = {"Tofanma"},
["tlh"] = {"Klingon", "tlhIngan Hol"},
["tli"] = {"Tlingit"},
["tlj"] = {"Talinga-Bwisi"},
["tlk"] = {"Taloki"},
["tll"] = {"Tetela"},
["tlm"] = {"Tolomako"},
["tln"] = {"Talondo'"},
["tlo"] = {"Talodi"},
["tlp"] = {"Filomena Mata-Coahuitlán Totonac"},
["tlq"] = {"Tai Loi"},
["tlr"] = {"Talise"},
["tls"] = {"Tambotalo"},
["tlt"] = {"Sou Nama", "Teluti"},
["tlu"] = {"Tulehu"},
["tlv"] = {"Taliabu"},
["tlx"] = {"Khehek"},
["tly"] = {"Talysh"},
["tma"] = {"Tama (Chad)"},
["tmb"] = {"Katbol", "Avava"},
["tmc"] = {"Tumak"},
["tmd"] = {"Haruai"},
["tme"] = {"Tremembé"},
["tmf"] = {"Toba-Maskoy"},
["tmg"] = {"Ternateño"},
["tmh"] = {"Tamashek"},
["tmi"] = {"Tutuba"},
["tmj"] = {"Samarokena"},
["tml"] = {"Tamnim Citak"},
["tmm"] = {"Tai Thanh"},
["tmn"] = {"Taman (Indonesia)"},
["tmo"] = {"Temoq"},
["tmq"] = {"Tumleo"},
["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"},
["tms"] = {"Tima"},
["tmt"] = {"Tasmate"},
["tmu"] = {"Iau"},
["tmv"] = {"Tembo (Motembo)"},
["tmw"] = {"Temuan"},
["tmy"] = {"Tami"},
["tmz"] = {"Tamanaku"},
["tna"] = {"Tacana"},
["tnb"] = {"Western Tunebo"},
["tnc"] = {"Tanimuca-Retuarã"},
["tnd"] = {"Angosturas Tunebo"},
["tng"] = {"Tobanga"},
["tnh"] = {"Maiani"},
["tni"] = {"Tandia"},
["tnk"] = {"Kwamera"},
["tnl"] = {"Lenakel"},
["tnm"] = {"Tabla"},
["tnn"] = {"North Tanna"},
["tno"] = {"Toromono"},
["tnp"] = {"Whitesands"},
["tnq"] = {"Taino"},
["tnr"] = {"Ménik"},
["tns"] = {"Tenis"},
["tnt"] = {"Tontemboan"},
["tnu"] = {"Tay Khang"},
["tnv"] = {"Tangchangya"},
["tnw"] = {"Tonsawang"},
["tnx"] = {"Tanema"},
["tny"] = {"Tongwe"},
["tnz"] = {"Ten'edn"},
["tob"] = {"Toba"},
["toc"] = {"Coyutla Totonac"},
["tod"] = {"Toma"},
["tof"] = {"Gizrra"},
["tog"] = {"Tonga (Nyasa)"},
["toh"] = {"Gitonga"},
["toi"] = {"Tonga (Zambia)"},
["toj"] = {"Tojolabal"},
["tok"] = {"Toki Pona"},
["tol"] = {"Tolowa"},
["tom"] = {"Tombulu"},
["too"] = {"Xicotepec De Juárez Totonac"},
["top"] = {"Papantla Totonac"},
["toq"] = {"Toposa"},
["tor"] = {"Togbo-Vara Banda"},
["tos"] = {"Highland Totonac"},
["tou"] = {"Tho"},
["tov"] = {"Upper Taromi"},
["tow"] = {"Jemez"},
["tox"] = {"Tobian"},
["toy"] = {"Topoiyo"},
["toz"] = {"To"},
["tpa"] = {"Taupota"},
["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"},
["tpe"] = {"Tippera"},
["tpf"] = {"Tarpia"},
["tpg"] = {"Kula"},
["tpi"] = {"Tok Pisin"},
["tpj"] = {"Tapieté"},
["tpk"] = {"Tupinikin"},
["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"},
["tpm"] = {"Tampulma"},
["tpn"] = {"Tupinambá"},
["tpo"] = {"Tai Pao"},
["tpp"] = {"Pisaflores Tepehua"},
["tpq"] = {"Tukpa"},
["tpr"] = {"Tuparí"},
["tpt"] = {"Tlachichilco Tepehua"},
["tpu"] = {"Tampuan"},
["tpv"] = {"Tanapag"},
["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"},
["tpy"] = {"Trumai"},
["tpz"] = {"Tinputz"},
["tqb"] = {"Tembé"},
["tql"] = {"Lehali"},
["tqm"] = {"Turumsa"},
["tqn"] = {"Tenino"},
["tqo"] = {"Toaripi"},
["tqp"] = {"Tomoip"},
["tqq"] = {"Tunni"},
["tqr"] = {"Torona"},
["tqt"] = {"Western Totonac"},
["tqu"] = {"Touo"},
["tqw"] = {"Tonkawa"},
["tra"] = {"Tirahi"},
["trb"] = {"Terebu"},
["trc"] = {"Copala Triqui"},
["trd"] = {"Turi"},
["tre"] = {"East Tarangan"},
["trf"] = {"Trinidadian Creole English"},
["trg"] = {"Lishán Didán"},
["trh"] = {"Turaka"},
["tri"] = {"Trió"},
["trj"] = {"Toram"},
["trk"] = {"Turkic languages"},
["trl"] = {"Traveller Scottish"},
["trm"] = {"Tregami"},
["trn"] = {"Trinitario"},
["tro"] = {"Tarao Naga"},
["trp"] = {"Kok Borok"},
["trq"] = {"San Martín Itunyoso Triqui"},
["trr"] = {"Taushiro"},
["trs"] = {"Chicahuaxtla Triqui"},
["trt"] = {"Tunggare"},
["tru"] = {"Turoyo", "Surayt"},
["trv"] = {"Sediq", "Seediq", "Taroko"},
["trw"] = {"Torwali"},
["trx"] = {"Tringgus-Sembaan Bidayuh"},
["try"] = {"Turung"},
["trz"] = {"Torá"},
["tsa"] = {"Tsaangi"},
["tsb"] = {"Tsamai"},
["tsc"] = {"Tswa"},
["tsd"] = {"Tsakonian"},
["tse"] = {"Tunisian Sign Language"},
["tsg"] = {"Tausug"},
["tsh"] = {"Tsuvan"},
["tsi"] = {"Tsimshian"},
["tsj"] = {"Tshangla"},
["tsk"] = {"Tseku"},
["tsl"] = {"Ts'ün-Lao"},
["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"},
["tsp"] = {"Northern Toussian"},
["tsq"] = {"Thai Sign Language"},
["tsr"] = {"Akei"},
["tss"] = {"Taiwan Sign Language"},
["tst"] = {"Tondi Songway Kiini"},
["tsu"] = {"Tsou"},
["tsv"] = {"Tsogo"},
["tsw"] = {"Tsishingini"},
["tsx"] = {"Mubami"},
["tsy"] = {"Tebul Sign Language"},
["tsz"] = {"Purepecha"},
["tta"] = {"Tutelo"},
["ttb"] = {"Gaa"},
["ttc"] = {"Tektiteko"},
["ttd"] = {"Tauade"},
["tte"] = {"Bwanabwana"},
["ttf"] = {"Tuotomb"},
["ttg"] = {"Tutong"},
["tth"] = {"Upper Ta'oih"},
["tti"] = {"Tobati"},
["ttj"] = {"Tooro"},
["ttk"] = {"Totoro"},
["ttl"] = {"Totela"},
["ttm"] = {"Northern Tutchone"},
["ttn"] = {"Towei"},
["tto"] = {"Lower Ta'oih"},
["ttp"] = {"Tombelala"},
["ttq"] = {"Tawallammat Tamajaq"},
["ttr"] = {"Tera"},
["tts"] = {"Northeastern Thai"},
["ttt"] = {"Muslim Tat"},
["ttu"] = {"Torau"},
["ttv"] = {"Titan"},
["ttw"] = {"Long Wat"},
["tty"] = {"Sikaritai"},
["ttz"] = {"Tsum"},
["tua"] = {"Wiarumus"},
["tub"] = {"Tübatulabal"},
["tuc"] = {"Mutu"},
["tud"] = {"Tuxá"},
["tue"] = {"Tuyuca"},
["tuf"] = {"Central Tunebo"},
["tug"] = {"Tunia"},
["tuh"] = {"Taulil"},
["tui"] = {"Tupuri"},
["tuj"] = {"Tugutil"},
["tul"] = {"Tula"},
["tum"] = {"Tumbuka"},
["tun"] = {"Tunica"},
["tuo"] = {"Tucano"},
["tup"] = {"Tupi languages"},
["tuq"] = {"Tedaga"},
["tus"] = {"Tuscarora"},
["tut"] = {"Altaic languages"},
["tuu"] = {"Tututni"},
["tuv"] = {"Turkana"},
["tuw"] = {"Tungus languages"},
["tux"] = {"Tuxináwa"},
["tuy"] = {"Tugen"},
["tuz"] = {"Turka"},
["tva"] = {"Vaghua"},
["tvd"] = {"Tsuvadi"},
["tve"] = {"Te'un"},
["tvi"] = {"Tulai"},
["tvk"] = {"Southeast Ambrym"},
["tvl"] = {"Tuvalu"},
["tvm"] = {"Tela-Masbuar"},
["tvn"] = {"Tavoyan"},
["tvo"] = {"Tidore"},
["tvs"] = {"Taveta"},
["tvt"] = {"Tutsa Naga"},
["tvu"] = {"Tunen"},
["tvw"] = {"Sedoa"},
["tvx"] = {"Taivoan"},
["tvy"] = {"Timor Pidgin"},
["twa"] = {"Twana"},
["twb"] = {"Western Tawbuid"},
["twc"] = {"Teshenawa"},
["twd"] = {"Twents"},
["twe"] = {"Tewa (Indonesia)"},
["twf"] = {"Northern Tiwa"},
["twg"] = {"Tereweng"},
["twh"] = {"Tai Dón"},
["twl"] = {"Tawara"},
["twm"] = {"Tawang Monpa"},
["twn"] = {"Twendi"},
["two"] = {"Tswapong"},
["twp"] = {"Ere"},
["twq"] = {"Tasawaq"},
["twr"] = {"Southwestern Tarahumara"},
["twt"] = {"Turiwára"},
["twu"] = {"Termanu"},
["tww"] = {"Tuwari"},
["twx"] = {"Tewe"},
["twy"] = {"Tawoyan"},
["txa"] = {"Tombonuo"},
["txb"] = {"Tokharian B"},
["txc"] = {"Tsetsaut"},
["txe"] = {"Totoli"},
["txg"] = {"Tangut"},
["txh"] = {"Thracian"},
["txi"] = {"Ikpeng"},
["txj"] = {"Tarjumo"},
["txm"] = {"Tomini"},
["txn"] = {"West Tarangan"},
["txo"] = {"Toto"},
["txq"] = {"Tii"},
["txr"] = {"Tartessian"},
["txs"] = {"Tonsea"},
["txt"] = {"Citak"},
["txu"] = {"Kayapó"},
["txx"] = {"Tatana"},
["txy"] = {"Tanosy Malagasy"},
["tya"] = {"Tauya"},
["tye"] = {"Kyanga"},
["tyh"] = {"O'du"},
["tyi"] = {"Teke-Tsaayi"},
["tyj"] = {"Tai Do", "Tai Yo"},
["tyl"] = {"Thu Lao"},
["tyn"] = {"Kombai"},
["typ"] = {"Thaypan"},
["tyr"] = {"Tai Daeng"},
["tys"] = {"Tày Sa Pa"},
["tyt"] = {"Tày Tac"},
["tyu"] = {"Kua"},
["tyv"] = {"Tuvinian"},
["tyx"] = {"Teke-Tyee"},
["tyy"] = {"Tiyaa"},
["tyz"] = {"Tày"},
["tza"] = {"Tanzanian Sign Language"},
["tzh"] = {"Tzeltal"},
["tzj"] = {"Tz'utujil"},
["tzl"] = {"Talossan"},
["tzm"] = {"Central Atlas Tamazight"},
["tzn"] = {"Tugun"},
["tzo"] = {"Tzotzil"},
["tzx"] = {"Tabriak"},
["uam"] = {"Uamué"},
["uan"] = {"Kuan"},
["uar"] = {"Tairuma"},
["uba"] = {"Ubang"},
["ubi"] = {"Ubi"},
["ubl"] = {"Buhi'non Bikol"},
["ubr"] = {"Ubir"},
["ubu"] = {"Umbu-Ungu"},
["uby"] = {"Ubykh"},
["uda"] = {"Uda"},
["ude"] = {"Udihe"},
["udg"] = {"Muduga"},
["udi"] = {"Udi"},
["udj"] = {"Ujir"},
["udl"] = {"Wuzlam"},
["udm"] = {"Udmurt"},
["udu"] = {"Uduk"},
["ues"] = {"Kioko"},
["ufi"] = {"Ufim"},
["uga"] = {"Ugaritic"},
["ugb"] = {"Kuku-Ugbanh"},
["uge"] = {"Ughele"},
["ugh"] = {"Kubachi"},
["ugn"] = {"Ugandan Sign Language"},
["ugo"] = {"Ugong"},
["ugy"] = {"Uruguayan Sign Language"},
["uha"] = {"Uhami"},
["uhn"] = {"Damal"},
["uis"] = {"Uisai"},
["uiv"] = {"Iyive"},
["uji"] = {"Tanjijili"},
["uka"] = {"Kaburi"},
["ukg"] = {"Ukuriguma"},
["ukh"] = {"Ukhwejo"},
["uki"] = {"Kui (India)"},
["ukk"] = {"Muak Sa-aak"},
["ukl"] = {"Ukrainian Sign Language"},
["ukp"] = {"Ukpe-Bayobiri"},
["ukq"] = {"Ukwa"},
["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"},
["uku"] = {"Ukue"},
["ukv"] = {"Kuku"},
["ukw"] = {"Ukwuani-Aboh-Ndoni"},
["uky"] = {"Kuuk-Yak"},
["ula"] = {"Fungwa"},
["ulb"] = {"Ulukwumi"},
["ulc"] = {"Ulch"},
["ule"] = {"Lule"},
["ulf"] = {"Usku", "Afra"},
["uli"] = {"Ulithian"},
["ulk"] = {"Meriam Mir"},
["ull"] = {"Ullatan"},
["ulm"] = {"Ulumanda'"},
["uln"] = {"Unserdeutsch"},
["ulu"] = {"Uma' Lung"},
["ulw"] = {"Ulwa"},
["uly"] = {"Buli"},
["uma"] = {"Umatilla"},
["umb"] = {"Umbundu"},
["umc"] = {"Marrucinian"},
["umd"] = {"Umbindhamu"},
["umg"] = {"Morrobalama", "Umbuygamu"},
["umi"] = {"Ukit"},
["umm"] = {"Umon"},
["umn"] = {"Makyan Naga"},
["umo"] = {"Umotína"},
["ump"] = {"Umpila"},
["umr"] = {"Umbugarla"},
["ums"] = {"Pendau"},
["umu"] = {"Munsee"},
["una"] = {"North Watut"},
["und"] = {"Undetermined"},
["une"] = {"Uneme"},
["ung"] = {"Ngarinyin"},
["uni"] = {"Uni"},
["unk"] = {"Enawené-Nawé"},
["unm"] = {"Unami"},
["unn"] = {"Kurnai"},
["unr"] = {"Mundari"},
["unu"] = {"Unubahe"},
["unx"] = {"Munda"},
["unz"] = {"Unde Kaili"},
["uon"] = {"Kulon"},
["upi"] = {"Umeda"},
["upv"] = {"Uripiv-Wala-Rano-Atchin"},
["ura"] = {"Urarina"},
["urb"] = {"Urubú-Kaapor", "Kaapor"},
["urc"] = {"Urningangg"},
["ure"] = {"Uru"},
["urf"] = {"Uradhi"},
["urg"] = {"Urigina"},
["urh"] = {"Urhobo"},
["uri"] = {"Urim"},
["urj"] = {"Uralic languages"},
["urk"] = {"Urak Lawoi'"},
["url"] = {"Urali"},
["urm"] = {"Urapmin"},
["urn"] = {"Uruangnirin"},
["uro"] = {"Ura (Papua New Guinea)"},
["urp"] = {"Uru-Pa-In"},
["urr"] = {"Lehalurup", "Löyöp"},
["urt"] = {"Urat"},
["uru"] = {"Urumi"},
["urv"] = {"Uruava"},
["urw"] = {"Sop"},
["urx"] = {"Urimo"},
["ury"] = {"Orya"},
["urz"] = {"Uru-Eu-Wau-Wau"},
["usa"] = {"Usarufa"},
["ush"] = {"Ushojo"},
["usi"] = {"Usui"},
["usk"] = {"Usaghade"},
["usp"] = {"Uspanteco"},
["uss"] = {"us-Saare"},
["usu"] = {"Uya"},
["uta"] = {"Otank"},
["ute"] = {"Ute-Southern Paiute"},
["uth"] = {"ut-Hun"},
["utp"] = {"Amba (Solomon Islands)"},
["utr"] = {"Etulo"},
["utu"] = {"Utu"},
["uum"] = {"Urum"},
["uur"] = {"Ura (Vanuatu)"},
["uuu"] = {"U"},
["uve"] = {"West Uvean", "Fagauvea"},
["uvh"] = {"Uri"},
["uvl"] = {"Lote"},
["uwa"] = {"Kuku-Uwanh"},
["uya"] = {"Doko-Uyanga"},
["uzn"] = {"Northern Uzbek"},
["uzs"] = {"Southern Uzbek"},
["vaa"] = {"Vaagri Booli"},
["vae"] = {"Vale"},
["vaf"] = {"Vafsi"},
["vag"] = {"Vagla"},
["vah"] = {"Varhadi-Nagpuri"},
["vai"] = {"Vai"},
["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"},
["val"] = {"Vehes"},
["vam"] = {"Vanimo"},
["van"] = {"Valman"},
["vao"] = {"Vao"},
["vap"] = {"Vaiphei"},
["var"] = {"Huarijio"},
["vas"] = {"Vasavi"},
["vau"] = {"Vanuma"},
["vav"] = {"Varli"},
["vay"] = {"Wayu"},
["vbb"] = {"Southeast Babar"},
["vbk"] = {"Southwestern Bontok"},
["vec"] = {"Venetian"},
["ved"] = {"Veddah"},
["vel"] = {"Veluws"},
["vem"] = {"Vemgo-Mabas"},
["veo"] = {"Ventureño"},
["vep"] = {"Veps"},
["ver"] = {"Mom Jango"},
["vgr"] = {"Vaghri"},
["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"},
["vic"] = {"Virgin Islands Creole English"},
["vid"] = {"Vidunda"},
["vif"] = {"Vili"},
["vig"] = {"Viemo"},
["vil"] = {"Vilela"},
["vin"] = {"Vinza"},
["vis"] = {"Vishavan"},
["vit"] = {"Viti"},
["viv"] = {"Iduna"},
["vjk"] = {"Bajjika"},
["vka"] = {"Kariyarra"},
["vkj"] = {"Kujarge"},
["vkk"] = {"Kaur"},
["vkl"] = {"Kulisusu"},
["vkm"] = {"Kamakan"},
["vkn"] = {"Koro Nulu"},
["vko"] = {"Kodeoha"},
["vkp"] = {"Korlai Creole Portuguese"},
["vkt"] = {"Tenggarong Kutai Malay"},
["vku"] = {"Kurrama"},
["vkz"] = {"Koro Zuba"},
["vlp"] = {"Valpei"},
["vls"] = {"Vlaams"},
["vma"] = {"Martuyhunira"},
["vmb"] = {"Barbaram"},
["vmc"] = {"Juxtlahuaca Mixtec"},
["vmd"] = {"Mudu Koraga"},
["vme"] = {"East Masela"},
["vmf"] = {"Mainfränkisch"},
["vmg"] = {"Lungalunga"},
["vmh"] = {"Maraghei"},
["vmi"] = {"Miwa"},
["vmj"] = {"Ixtayutla Mixtec"},
["vmk"] = {"Makhuwa-Shirima"},
["vml"] = {"Malgana"},
["vmm"] = {"Mitlatongo Mixtec"},
["vmp"] = {"Soyaltepec Mazatec"},
["vmq"] = {"Soyaltepec Mixtec"},
["vmr"] = {"Marenje"},
["vms"] = {"Moksela"},
["vmu"] = {"Muluridyi"},
["vmv"] = {"Valley Maidu"},
["vmw"] = {"Makhuwa"},
["vmx"] = {"Tamazola Mixtec"},
["vmy"] = {"Ayautla Mazatec"},
["vmz"] = {"Mazatlán Mazatec"},
["vnk"] = {"Vano", "Lovono"},
["vnm"] = {"Vinmavis", "Neve'ei"},
["vnp"] = {"Vunapu"},
["vor"] = {"Voro"},
["vot"] = {"Votic"},
["vra"] = {"Vera'a"},
["vro"] = {"Võro"},
["vrs"] = {"Varisi"},
["vrt"] = {"Burmbar", "Banam Bay"},
["vsi"] = {"Moldova Sign Language"},
["vsl"] = {"Venezuelan Sign Language"},
["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"},
["vto"] = {"Vitou"},
["vum"] = {"Vumbu"},
["vun"] = {"Vunjo"},
["vut"] = {"Vute"},
["vwa"] = {"Awa (China)"},
["waa"] = {"Walla Walla"},
["wab"] = {"Wab"},
["wac"] = {"Wasco-Wishram"},
["wad"] = {"Wamesa", "Wondama"},
["wae"] = {"Walser"},
["waf"] = {"Wakoná"},
["wag"] = {"Wa'ema"},
["wah"] = {"Watubela"},
["wai"] = {"Wares"},
["waj"] = {"Waffa"},
["wak"] = {"Wakashan languages"},
["wal"] = {"Wolaytta", "Wolaitta"},
["wam"] = {"Wampanoag"},
["wan"] = {"Wan"},
["wao"] = {"Wappo"},
["wap"] = {"Wapishana"},
["waq"] = {"Wagiman"},
["war"] = {"Waray (Philippines)"},
["was"] = {"Washo"},
["wat"] = {"Kaninuwa"},
["wau"] = {"Waurá"},
["wav"] = {"Waka"},
["waw"] = {"Waiwai"},
["wax"] = {"Watam", "Marangis"},
["way"] = {"Wayana"},
["waz"] = {"Wampur"},
["wba"] = {"Warao"},
["wbb"] = {"Wabo"},
["wbe"] = {"Waritai"},
["wbf"] = {"Wara"},
["wbh"] = {"Wanda"},
["wbi"] = {"Vwanji"},
["wbj"] = {"Alagwa"},
["wbk"] = {"Waigali"},
["wbl"] = {"Wakhi"},
["wbm"] = {"Wa"},
["wbp"] = {"Warlpiri"},
["wbq"] = {"Waddar"},
["wbr"] = {"Wagdi"},
["wbs"] = {"West Bengal Sign Language"},
["wbt"] = {"Warnman"},
["wbv"] = {"Wajarri"},
["wbw"] = {"Woi"},
["wca"] = {"Yanomámi"},
["wci"] = {"Waci Gbe"},
["wdd"] = {"Wandji"},
["wdg"] = {"Wadaginam"},
["wdj"] = {"Wadjiginy"},
["wdk"] = {"Wadikali"},
["wdt"] = {"Wendat"},
["wdu"] = {"Wadjigu"},
["wdy"] = {"Wadjabangayi"},
["wea"] = {"Wewaw"},
["wec"] = {"Wè Western"},
["wed"] = {"Wedau"},
["weg"] = {"Wergaia"},
["weh"] = {"Weh"},
["wei"] = {"Kiunum"},
["wem"] = {"Weme Gbe"},
["wen"] = {"Sorbian languages"},
["weo"] = {"Wemale"},
["wep"] = {"Westphalien"},
["wer"] = {"Weri"},
["wes"] = {"Cameroon Pidgin"},
["wet"] = {"Perai"},
["weu"] = {"Rawngtu Chin"},
["wew"] = {"Wejewa"},
["wfg"] = {"Yafi", "Zorop"},
["wga"] = {"Wagaya"},
["wgb"] = {"Wagawaga"},
["wgg"] = {"Wangkangurru", "Wangganguru"},
["wgi"] = {"Wahgi"},
["wgo"] = {"Waigeo"},
["wgu"] = {"Wirangu"},
["wgy"] = {"Warrgamay"},
["wha"] = {"Sou Upaa", "Manusela"},
["whg"] = {"North Wahgi"},
["whk"] = {"Wahau Kenyah"},
["whu"] = {"Wahau Kayan"},
["wib"] = {"Southern Toussian"},
["wic"] = {"Wichita"},
["wie"] = {"Wik-Epa"},
["wif"] = {"Wik-Keyangan"},
["wig"] = {"Wik Ngathan"},
["wih"] = {"Wik-Me'anha"},
["wii"] = {"Minidien"},
["wij"] = {"Wik-Iiyanh"},
["wik"] = {"Wikalkan"},
["wil"] = {"Wilawila"},
["wim"] = {"Wik-Mungkan"},
["win"] = {"Ho-Chunk"},
["wir"] = {"Wiraféd"},
["wiu"] = {"Wiru"},
["wiv"] = {"Vitu"},
["wiy"] = {"Wiyot"},
["wja"] = {"Waja"},
["wji"] = {"Warji"},
["wka"] = {"Kw'adza"},
["wkb"] = {"Kumbaran"},
["wkd"] = {"Wakde", "Mo"},
["wkl"] = {"Kalanadi"},
["wkr"] = {"Keerray-Woorroong"},
["wku"] = {"Kunduvadi"},
["wkw"] = {"Wakawaka"},
["wky"] = {"Wangkayutyuru"},
["wla"] = {"Walio"},
["wlc"] = {"Mwali Comorian"},
["wle"] = {"Wolane"},
["wlg"] = {"Kunbarlang"},
["wlh"] = {"Welaun"},
["wli"] = {"Waioli"},
["wlk"] = {"Wailaki"},
["wll"] = {"Wali (Sudan)"},
["wlm"] = {"Middle Welsh"},
["wlo"] = {"Wolio"},
["wlr"] = {"Wailapa"},
["wls"] = {"Wallisian"},
["wlu"] = {"Wuliwuli"},
["wlv"] = {"Wichí Lhamtés Vejoz"},
["wlw"] = {"Walak"},
["wlx"] = {"Wali (Ghana)"},
["wly"] = {"Waling"},
["wma"] = {"Mawa (Nigeria)"},
["wmb"] = {"Wambaya"},
["wmc"] = {"Wamas"},
["wmd"] = {"Mamaindé"},
["wme"] = {"Wambule"},
["wmg"] = {"Western Minyag"},
["wmh"] = {"Waima'a"},
["wmi"] = {"Wamin"},
["wmm"] = {"Maiwa (Indonesia)"},
["wmn"] = {"Waamwang"},
["wmo"] = {"Wom (Papua New Guinea)"},
["wms"] = {"Wambon"},
["wmt"] = {"Walmajarri"},
["wmw"] = {"Mwani"},
["wmx"] = {"Womo"},
["wnb"] = {"Mokati"},
["wnc"] = {"Wantoat"},
["wnd"] = {"Wandarang"},
["wne"] = {"Waneci"},
["wng"] = {"Wanggom"},
["wni"] = {"Ndzwani Comorian"},
["wnk"] = {"Wanukaka"},
["wnm"] = {"Wanggamala"},
["wnn"] = {"Wunumara"},
["wno"] = {"Wano"},
["wnp"] = {"Wanap"},
["wnu"] = {"Usan"},
["wnw"] = {"Wintu"},
["wny"] = {"Wanyi", "Waanyi"},
["woa"] = {"Kuwema", "Tyaraity"},
["wob"] = {"Wè Northern"},
["woc"] = {"Wogeo"},
["wod"] = {"Wolani"},
["woe"] = {"Woleaian"},
["wof"] = {"Gambian Wolof"},
["wog"] = {"Wogamusin"},
["woi"] = {"Kamang"},
["wok"] = {"Longto"},
["wom"] = {"Wom (Nigeria)"},
["won"] = {"Wongo"},
["woo"] = {"Manombai"},
["wor"] = {"Woria"},
["wos"] = {"Hanga Hundi"},
["wow"] = {"Wawonii"},
["woy"] = {"Weyto"},
["wpc"] = {"Maco"},
["wrb"] = {"Waluwarra", "Warluwara"},
["wrg"] = {"Warungu", "Gudjal"},
["wrh"] = {"Wiradjuri"},
["wri"] = {"Wariyangga"},
["wrk"] = {"Garrwa"},
["wrl"] = {"Warlmanpa"},
["wrm"] = {"Warumungu"},
["wrn"] = {"Warnang"},
["wro"] = {"Worrorra"},
["wrp"] = {"Waropen"},
["wrr"] = {"Wardaman"},
["wrs"] = {"Waris"},
["wru"] = {"Waru"},
["wrv"] = {"Waruna"},
["wrw"] = {"Gugu Warra"},
["wrx"] = {"Wae Rana"},
["wry"] = {"Merwari"},
["wrz"] = {"Waray (Australia)"},
["wsa"] = {"Warembori"},
["wsg"] = {"Adilabad Gondi"},
["wsi"] = {"Wusi"},
["wsk"] = {"Waskia"},
["wsr"] = {"Owenia"},
["wss"] = {"Wasa"},
["wsu"] = {"Wasu"},
["wsv"] = {"Wotapuri-Katarqalai"},
["wtb"] = {"Matambwe"},
["wtf"] = {"Watiwa"},
["wth"] = {"Wathawurrung"},
["wti"] = {"Berta"},
["wtk"] = {"Watakataui"},
["wtm"] = {"Mewati"},
["wtw"] = {"Wotu"},
["wua"] = {"Wikngenchera"},
["wub"] = {"Wunambal"},
["wud"] = {"Wudu"},
["wuh"] = {"Wutunhua"},
["wul"] = {"Silimo"},
["wum"] = {"Wumbvu"},
["wun"] = {"Bungu"},
["wur"] = {"Wurrugu"},
["wut"] = {"Wutung"},
["wuu"] = {"Wu Chinese"},
["wuv"] = {"Wuvulu-Aua"},
["wux"] = {"Wulna"},
["wuy"] = {"Wauyai"},
["wwa"] = {"Waama"},
["wwb"] = {"Wakabunga"},
["wwo"] = {"Wetamut", "Dorig"},
["wwr"] = {"Warrwa"},
["www"] = {"Wawa"},
["wxa"] = {"Waxianghua"},
["wxw"] = {"Wardandi"},
["wyb"] = {"Wangaaybuwan-Ngiyambaa"},
["wyi"] = {"Woiwurrung"},
["wym"] = {"Wymysorys"},
["wyn"] = {"Wyandot"},
["wyr"] = {"Wayoró"},
["wyy"] = {"Western Fijian"},
["xaa"] = {"Andalusian Arabic"},
["xab"] = {"Sambe"},
["xac"] = {"Kachari"},
["xad"] = {"Adai"},
["xae"] = {"Aequian"},
["xag"] = {"Aghwan"},
["xai"] = {"Kaimbé"},
["xaj"] = {"Ararandewára"},
["xak"] = {"Máku"},
["xal"] = {"Kalmyk", "Oirat"},
["xam"] = {"ǀXam"},
["xan"] = {"Xamtanga"},
["xao"] = {"Khao"},
["xap"] = {"Apalachee"},
["xaq"] = {"Aquitanian"},
["xar"] = {"Karami"},
["xas"] = {"Kamas"},
["xat"] = {"Katawixi"},
["xau"] = {"Kauwera"},
["xav"] = {"Xavánte"},
["xaw"] = {"Kawaiisu"},
["xay"] = {"Kayan Mahakam"},
["xbb"] = {"Lower Burdekin"},
["xbc"] = {"Bactrian"},
["xbd"] = {"Bindal"},
["xbe"] = {"Bigambal"},
["xbg"] = {"Bunganditj"},
["xbi"] = {"Kombio"},
["xbj"] = {"Birrpayi"},
["xbm"] = {"Middle Breton"},
["xbn"] = {"Kenaboi"},
["xbo"] = {"Bolgarian"},
["xbp"] = {"Bibbulman"},
["xbr"] = {"Kambera"},
["xbw"] = {"Kambiwá"},
["xby"] = {"Batjala", "Batyala"},
["xcb"] = {"Cumbric"},
["xcc"] = {"Camunic"},
["xce"] = {"Celtiberian"},
["xcg"] = {"Cisalpine Gaulish"},
["xch"] = {"Chemakum", "Chimakum"},
["xcl"] = {"Classical Armenian"},
["xcm"] = {"Comecrudo"},
["xcn"] = {"Cotoname"},
["xco"] = {"Chorasmian"},
["xcr"] = {"Carian"},
["xct"] = {"Classical Tibetan"},
["xcu"] = {"Curonian"},
["xcv"] = {"Chuvantsy"},
["xcw"] = {"Coahuilteco"},
["xcy"] = {"Cayuse"},
["xda"] = {"Darkinyung"},
["xdc"] = {"Dacian"},
["xdk"] = {"Dharuk"},
["xdm"] = {"Edomite"},
["xdo"] = {"Kwandu"},
["xdq"] = {"Kaitag"},
["xdy"] = {"Malayic Dayak"},
["xeb"] = {"Eblan"},
["xed"] = {"Hdi"},
["xeg"] = {"ǁXegwi"},
["xel"] = {"Kelo"},
["xem"] = {"Kembayan"},
["xep"] = {"Epi-Olmec"},
["xer"] = {"Xerénte"},
["xes"] = {"Kesawai"},
["xet"] = {"Xetá"},
["xeu"] = {"Keoru-Ahia"},
["xfa"] = {"Faliscan"},
["xga"] = {"Galatian"},
["xgb"] = {"Gbin"},
["xgd"] = {"Gudang"},
["xgf"] = {"Gabrielino-Fernandeño"},
["xgg"] = {"Goreng"},
["xgi"] = {"Garingbal"},
["xgl"] = {"Galindan"},
["xgm"] = {"Dharumbal", "Guwinmal"},
["xgn"] = {"Mongolian languages"},
["xgr"] = {"Garza"},
["xgu"] = {"Unggumi"},
["xgw"] = {"Guwa"},
["xha"] = {"Harami"},
["xhc"] = {"Hunnic"},
["xhd"] = {"Hadrami"},
["xhe"] = {"Khetrani"},
["xhm"] = {"Middle Khmer (1400 to 1850 CE)"},
["xhr"] = {"Hernican"},
["xht"] = {"Hattic"},
["xhu"] = {"Hurrian"},
["xhv"] = {"Khua"},
["xib"] = {"Iberian"},
["xii"] = {"Xiri"},
["xil"] = {"Illyrian"},
["xin"] = {"Xinca"},
["xir"] = {"Xiriâna"},
["xis"] = {"Kisan"},
["xiv"] = {"Indus Valley Language"},
["xiy"] = {"Xipaya"},
["xjb"] = {"Minjungbal"},
["xjt"] = {"Jaitmatang"},
["xka"] = {"Kalkoti"},
["xkb"] = {"Northern Nago"},
["xkc"] = {"Kho'ini"},
["xkd"] = {"Mendalam Kayan"},
["xke"] = {"Kereho"},
["xkf"] = {"Khengkha"},
["xkg"] = {"Kagoro"},
["xki"] = {"Kenyan Sign Language"},
["xkj"] = {"Kajali"},
["xkk"] = {"Kachok", "Kaco'"},
["xkl"] = {"Mainstream Kenyah"},
["xkn"] = {"Kayan River Kayan"},
["xko"] = {"Kiorr"},
["xkp"] = {"Kabatei"},
["xkq"] = {"Koroni"},
["xkr"] = {"Xakriabá"},
["xks"] = {"Kumbewaha"},
["xkt"] = {"Kantosi"},
["xku"] = {"Kaamba"},
["xkv"] = {"Kgalagadi"},
["xkw"] = {"Kembra"},
["xkx"] = {"Karore"},
["xky"] = {"Uma' Lasan"},
["xkz"] = {"Kurtokha"},
["xla"] = {"Kamula"},
["xlb"] = {"Loup B"},
["xlc"] = {"Lycian"},
["xld"] = {"Lydian"},
["xle"] = {"Lemnian"},
["xlg"] = {"Ligurian (Ancient)"},
["xli"] = {"Liburnian"},
["xln"] = {"Alanic"},
["xlo"] = {"Loup A"},
["xlp"] = {"Lepontic"},
["xls"] = {"Lusitanian"},
["xlu"] = {"Cuneiform Luwian"},
["xly"] = {"Elymian"},
["xma"] = {"Mushungulu"},
["xmb"] = {"Mbonga"},
["xmc"] = {"Makhuwa-Marrevone"},
["xmd"] = {"Mbudum"},
["xme"] = {"Median"},
["xmf"] = {"Mingrelian"},
["xmg"] = {"Mengaka"},
["xmh"] = {"Kugu-Muminh"},
["xmj"] = {"Majera"},
["xmk"] = {"Ancient Macedonian"},
["xml"] = {"Malaysian Sign Language"},
["xmm"] = {"Manado Malay"},
["xmn"] = {"Manichaean Middle Persian"},
["xmo"] = {"Morerebi"},
["xmp"] = {"Kuku-Mu'inh"},
["xmq"] = {"Kuku-Mangk"},
["xmr"] = {"Meroitic"},
["xms"] = {"Moroccan Sign Language"},
["xmt"] = {"Matbat"},
["xmu"] = {"Kamu"},
["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"},
["xmw"] = {"Tsimihety Malagasy"},
["xmx"] = {"Salawati", "Maden"},
["xmy"] = {"Mayaguduna"},
["xmz"] = {"Mori Bawah"},
["xna"] = {"Ancient North Arabian"},
["xnb"] = {"Kanakanabu"},
["xnd"] = {"Na-Dene languages"},
["xng"] = {"Middle Mongolian"},
["xnh"] = {"Kuanhua"},
["xni"] = {"Ngarigu"},
["xnj"] = {"Ngoni (Tanzania)"},
["xnk"] = {"Nganakarti"},
["xnm"] = {"Ngumbarl"},
["xnn"] = {"Northern Kankanay"},
["xno"] = {"Anglo-Norman"},
["xnq"] = {"Ngoni (Mozambique)"},
["xnr"] = {"Kangri"},
["xns"] = {"Kanashi"},
["xnt"] = {"Narragansett"},
["xnu"] = {"Nukunul"},
["xny"] = {"Nyiyaparli"},
["xnz"] = {"Kenzi", "Mattoki"},
["xoc"] = {"O'chi'chi'"},
["xod"] = {"Kokoda"},
["xog"] = {"Soga"},
["xoi"] = {"Kominimung"},
["xok"] = {"Xokleng"},
["xom"] = {"Komo (Sudan)"},
["xon"] = {"Konkomba"},
["xoo"] = {"Xukurú"},
["xop"] = {"Kopar"},
["xor"] = {"Korubo"},
["xow"] = {"Kowaki"},
["xpa"] = {"Pirriya"},
["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"},
["xpc"] = {"Pecheneg"},
["xpd"] = {"Oyster Bay Tasmanian"},
["xpe"] = {"Liberia Kpelle"},
["xpf"] = {"Southeast Tasmanian", "Nuenonne"},
["xpg"] = {"Phrygian"},
["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"},
["xpi"] = {"Pictish"},
["xpj"] = {"Mpalitjanh"},
["xpk"] = {"Kulina Pano"},
["xpl"] = {"Port Sorell Tasmanian"},
["xpm"] = {"Pumpokol"},
["xpn"] = {"Kapinawá"},
["xpo"] = {"Pochutec"},
["xpp"] = {"Puyo-Paekche"},
["xpq"] = {"Mohegan-Pequot"},
["xpr"] = {"Parthian"},
["xps"] = {"Pisidian"},
["xpt"] = {"Punthamara"},
["xpu"] = {"Punic"},
["xpv"] = {"Northern Tasmanian", "Tommeginne"},
["xpw"] = {"Northwestern Tasmanian", "Peerapper"},
["xpx"] = {"Southwestern Tasmanian", "Toogee"},
["xpy"] = {"Puyo"},
["xpz"] = {"Bruny Island Tasmanian"},
["xqa"] = {"Karakhanid"},
["xqt"] = {"Qatabanian"},
["xra"] = {"Krahô"},
["xrb"] = {"Eastern Karaboro"},
["xrd"] = {"Gundungurra"},
["xre"] = {"Kreye"},
["xrg"] = {"Minang"},
["xri"] = {"Krikati-Timbira"},
["xrm"] = {"Armazic"},
["xrn"] = {"Arin"},
["xrr"] = {"Raetic"},
["xrt"] = {"Aranama-Tamique"},
["xru"] = {"Marriammu"},
["xrw"] = {"Karawa"},
["xsa"] = {"Sabaean"},
["xsb"] = {"Sambal"},
["xsc"] = {"Scythian"},
["xsd"] = {"Sidetic"},
["xse"] = {"Sempan"},
["xsh"] = {"Shamang"},
["xsi"] = {"Sio"},
["xsj"] = {"Subi"},
["xsl"] = {"South Slavey"},
["xsm"] = {"Kasem"},
["xsn"] = {"Sanga (Nigeria)"},
["xso"] = {"Solano"},
["xsp"] = {"Silopi"},
["xsq"] = {"Makhuwa-Saka"},
["xsr"] = {"Sherpa"},
["xsu"] = {"Sanumá"},
["xsv"] = {"Sudovian"},
["xsy"] = {"Saisiyat"},
["xta"] = {"Alcozauca Mixtec"},
["xtb"] = {"Chazumba Mixtec"},
["xtc"] = {"Katcha-Kadugli-Miri"},
["xtd"] = {"Diuxi-Tilantongo Mixtec"},
["xte"] = {"Ketengban"},
["xtg"] = {"Transalpine Gaulish"},
["xth"] = {"Yitha Yitha"},
["xti"] = {"Sinicahua Mixtec"},
["xtj"] = {"San Juan Teita Mixtec"},
["xtl"] = {"Tijaltepec Mixtec"},
["xtm"] = {"Magdalena Peñasco Mixtec"},
["xtn"] = {"Northern Tlaxiaco Mixtec"},
["xto"] = {"Tokharian A"},
["xtp"] = {"San Miguel Piedras Mixtec"},
["xtq"] = {"Tumshuqese"},
["xtr"] = {"Early Tripuri"},
["xts"] = {"Sindihui Mixtec"},
["xtt"] = {"Tacahua Mixtec"},
["xtu"] = {"Cuyamecalco Mixtec"},
["xtv"] = {"Thawa"},
["xtw"] = {"Tawandê"},
["xty"] = {"Yoloxochitl Mixtec"},
["xua"] = {"Alu Kurumba"},
["xub"] = {"Betta Kurumba"},
["xud"] = {"Umiida"},
["xug"] = {"Kunigami"},
["xuj"] = {"Jennu Kurumba"},
["xul"] = {"Ngunawal", "Nunukul"},
["xum"] = {"Umbrian"},
["xun"] = {"Unggaranggu"},
["xuo"] = {"Kuo"},
["xup"] = {"Upper Umpqua"},
["xur"] = {"Urartian"},
["xut"] = {"Kuthant"},
["xuu"] = {"Kxoe", "Khwedam"},
["xve"] = {"Venetic"},
["xvi"] = {"Kamviri"},
["xvn"] = {"Vandalic"},
["xvo"] = {"Volscian"},
["xvs"] = {"Vestinian"},
["xwa"] = {"Kwaza"},
["xwc"] = {"Woccon"},
["xwd"] = {"Wadi Wadi"},
["xwe"] = {"Xwela Gbe"},
["xwg"] = {"Kwegu"},
["xwj"] = {"Wajuk"},
["xwk"] = {"Wangkumara"},
["xwl"] = {"Western Xwla Gbe"},
["xwo"] = {"Written Oirat"},
["xwr"] = {"Kwerba Mamberamo"},
["xwt"] = {"Wotjobaluk"},
["xww"] = {"Wemba Wemba"},
["xxb"] = {"Boro (Ghana)"},
["xxk"] = {"Ke'o"},
["xxm"] = {"Minkin"},
["xxr"] = {"Koropó"},
["xxt"] = {"Tambora"},
["xya"] = {"Yaygir"},
["xyb"] = {"Yandjibara"},
["xyj"] = {"Mayi-Yapi"},
["xyk"] = {"Mayi-Kulan"},
["xyl"] = {"Yalakalore"},
["xyt"] = {"Mayi-Thakurti"},
["xyy"] = {"Yorta Yorta"},
["xzh"] = {"Zhang-Zhung"},
["xzm"] = {"Zemgalian"},
["xzp"] = {"Ancient Zapotec"},
["yaa"] = {"Yaminahua"},
["yab"] = {"Yuhup"},
["yac"] = {"Pass Valley Yali"},
["yad"] = {"Yagua"},
["yae"] = {"Pumé"},
["yaf"] = {"Yaka (Democratic Republic of Congo)"},
["yag"] = {"Yámana"},
["yah"] = {"Yazgulyam"},
["yai"] = {"Yagnobi"},
["yaj"] = {"Banda-Yangere"},
["yak"] = {"Yakama"},
["yal"] = {"Yalunka"},
["yam"] = {"Yamba"},
["yan"] = {"Mayangna"},
["yao"] = {"Yao"},
["yap"] = {"Yapese"},
["yaq"] = {"Yaqui"},
["yar"] = {"Yabarana"},
["yas"] = {"Nugunu (Cameroon)"},
["yat"] = {"Yambeta"},
["yau"] = {"Yuwana"},
["yav"] = {"Yangben"},
["yaw"] = {"Yawalapití"},
["yax"] = {"Yauma"},
["yay"] = {"Agwagwune"},
["yaz"] = {"Lokaa"},
["yba"] = {"Yala"},
["ybb"] = {"Yemba"},
["ybe"] = {"West Yugur"},
["ybh"] = {"Yakha"},
["ybi"] = {"Yamphu"},
["ybj"] = {"Hasha"},
["ybk"] = {"Bokha"},
["ybl"] = {"Yukuben"},
["ybm"] = {"Yaben"},
["ybn"] = {"Yabaâna"},
["ybo"] = {"Yabong"},
["ybx"] = {"Yawiyo"},
["yby"] = {"Yaweyuha"},
["ych"] = {"Chesu"},
["ycl"] = {"Lolopo"},
["ycn"] = {"Yucuna"},
["ycp"] = {"Chepya"},
["ycr"] = {"Yilan Creole"},
["yda"] = {"Yanda"},
["ydd"] = {"Eastern Yiddish"},
["yde"] = {"Yangum Dey"},
["ydg"] = {"Yidgha"},
["ydk"] = {"Yoidik"},
["yea"] = {"Ravula"},
["yec"] = {"Yeniche"},
["yee"] = {"Yimas"},
["yei"] = {"Yeni"},
["yej"] = {"Yevanic"},
["yel"] = {"Yela"},
["yer"] = {"Tarok"},
["yes"] = {"Nyankpa"},
["yet"] = {"Yetfa"},
["yeu"] = {"Yerukula"},
["yev"] = {"Yapunda"},
["yey"] = {"Yeyi"},
["yga"] = {"Malyangapa"},
["ygi"] = {"Yiningayi"},
["ygl"] = {"Yangum Gel"},
["ygm"] = {"Yagomi"},
["ygp"] = {"Gepo"},
["ygr"] = {"Yagaria"},
["ygs"] = {"Yolŋu Sign Language"},
["ygu"] = {"Yugul"},
["ygw"] = {"Yagwoia"},
["yha"] = {"Baha Buyang"},
["yhd"] = {"Judeo-Iraqi Arabic"},
["yhl"] = {"Hlepho Phowa"},
["yhs"] = {"Yan-nhaŋu Sign Language"},
["yia"] = {"Yinggarda"},
["yif"] = {"Ache"},
["yig"] = {"Wusa Nasu"},
["yih"] = {"Western Yiddish"},
["yii"] = {"Yidiny"},
["yij"] = {"Yindjibarndi"},
["yik"] = {"Dongshanba Lalo"},
["yil"] = {"Yindjilandji"},
["yim"] = {"Yimchungru Naga"},
["yin"] = {"Riang Lai", "Yinchia"},
["yip"] = {"Pholo"},
["yiq"] = {"Miqie"},
["yir"] = {"North Awyu"},
["yis"] = {"Yis"},
["yit"] = {"Eastern Lalu"},
["yiu"] = {"Awu"},
["yiv"] = {"Northern Nisu"},
["yix"] = {"Axi Yi"},
["yiz"] = {"Azhe"},
["yka"] = {"Yakan"},
["ykg"] = {"Northern Yukaghir"},
["ykh"] = {"Khamnigan Mongol"},
["yki"] = {"Yoke"},
["ykk"] = {"Yakaikeke"},
["ykl"] = {"Khlula"},
["ykm"] = {"Kap"},
["ykn"] = {"Kua-nsi"},
["yko"] = {"Yasa"},
["ykr"] = {"Yekora"},
["ykt"] = {"Kathu"},
["yku"] = {"Kuamasi"},
["yky"] = {"Yakoma"},
["yla"] = {"Yaul"},
["ylb"] = {"Yaleba"},
["yle"] = {"Yele"},
["ylg"] = {"Yelogu"},
["yli"] = {"Angguruk Yali"},
["yll"] = {"Yil"},
["ylm"] = {"Limi"},
["yln"] = {"Langnian Buyang"},
["ylo"] = {"Naluo Yi"},
["ylr"] = {"Yalarnnga"},
["ylu"] = {"Aribwaung"},
["yly"] = {"Nyâlayu", "Nyelâyu"},
["ymb"] = {"Yambes"},
["ymc"] = {"Southern Muji"},
["ymd"] = {"Muda"},
["yme"] = {"Yameo"},
["ymg"] = {"Yamongeri"},
["ymh"] = {"Mili"},
["ymi"] = {"Moji"},
["ymk"] = {"Makwe"},
["yml"] = {"Iamalele"},
["ymm"] = {"Maay"},
["ymn"] = {"Yamna", "Sunum"},
["ymo"] = {"Yangum Mon"},
["ymp"] = {"Yamap"},
["ymq"] = {"Qila Muji"},
["ymr"] = {"Malasar"},
["yms"] = {"Mysian"},
["ymx"] = {"Northern Muji"},
["ymz"] = {"Muzi"},
["yna"] = {"Aluo"},
["ynd"] = {"Yandruwandha"},
["yne"] = {"Lang'e"},
["yng"] = {"Yango"},
["ynk"] = {"Naukan Yupik"},
["ynl"] = {"Yangulam"},
["ynn"] = {"Yana"},
["yno"] = {"Yong"},
["ynq"] = {"Yendang"},
["yns"] = {"Yansi"},
["ynu"] = {"Yahuna"},
["yob"] = {"Yoba"},
["yog"] = {"Yogad"},
["yoi"] = {"Yonaguni"},
["yok"] = {"Yokuts"},
["yol"] = {"Yola"},
["yom"] = {"Yombe"},
["yon"] = {"Yongkom"},
["yot"] = {"Yotti"},
["yox"] = {"Yoron"},
["yoy"] = {"Yoy"},
["ypa"] = {"Phala"},
["ypb"] = {"Labo Phowa"},
["ypg"] = {"Phola"},
["yph"] = {"Phupha"},
["ypk"] = {"Yupik languages"},
["ypm"] = {"Phuma"},
["ypn"] = {"Ani Phowa"},
["ypo"] = {"Alo Phola"},
["ypp"] = {"Phupa"},
["ypz"] = {"Phuza"},
["yra"] = {"Yerakai"},
["yrb"] = {"Yareba"},
["yre"] = {"Yaouré"},
["yrk"] = {"Nenets"},
["yrl"] = {"Nhengatu"},
["yrm"] = {"Yirrk-Mel"},
["yrn"] = {"Yerong"},
["yro"] = {"Yaroamë"},
["yrs"] = {"Yarsun"},
["yrw"] = {"Yarawata"},
["yry"] = {"Yarluyandi"},
["ysc"] = {"Yassic"},
["ysd"] = {"Samatao"},
["ysg"] = {"Sonaga"},
["ysl"] = {"Yugoslavian Sign Language"},
["ysm"] = {"Myanmar Sign Language"},
["ysn"] = {"Sani"},
["yso"] = {"Nisi (China)"},
["ysp"] = {"Southern Lolopo"},
["ysr"] = {"Sirenik Yupik"},
["yss"] = {"Yessan-Mayo"},
["ysy"] = {"Sanie"},
["yta"] = {"Talu"},
["ytl"] = {"Tanglang"},
["ytp"] = {"Thopho"},
["ytw"] = {"Yout Wam"},
["yty"] = {"Yatay"},
["yua"] = {"Yucateco", "Yucatec Maya"},
["yub"] = {"Yugambal"},
["yuc"] = {"Yuchi"},
["yud"] = {"Judeo-Tripolitanian Arabic"},
["yue"] = {"Yue Chinese", "Cantonese"},
["yuf"] = {"Havasupai-Walapai-Yavapai"},
["yug"] = {"Yug"},
["yui"] = {"Yurutí"},
["yuj"] = {"Karkar-Yuri"},
["yuk"] = {"Yuki"},
["yul"] = {"Yulu"},
["yum"] = {"Quechan"},
["yun"] = {"Bena (Nigeria)"},
["yup"] = {"Yukpa"},
["yuq"] = {"Yuqui"},
["yur"] = {"Yurok"},
["yut"] = {"Yopno"},
["yuw"] = {"Yau (Morobe Province)"},
["yux"] = {"Southern Yukaghir"},
["yuy"] = {"East Yugur"},
["yuz"] = {"Yuracare"},
["yva"] = {"Yawa"},
["yvt"] = {"Yavitero"},
["ywa"] = {"Kalou"},
["ywg"] = {"Yinhawangka"},
["ywl"] = {"Western Lalu"},
["ywn"] = {"Yawanawa"},
["ywq"] = {"Wuding-Luquan Yi"},
["ywr"] = {"Yawuru"},
["ywt"] = {"Xishanba Lalo", "Central Lalo"},
["ywu"] = {"Wumeng Nasu"},
["yww"] = {"Yawarawarga"},
["yxa"] = {"Mayawali"},
["yxg"] = {"Yagara"},
["yxl"] = {"Yardliyawarra"},
["yxm"] = {"Yinwum"},
["yxu"] = {"Yuyu"},
["yxy"] = {"Yabula Yabula"},
["yyr"] = {"Yir Yoront"},
["yyu"] = {"Yau (Sandaun Province)"},
["yyz"] = {"Ayizi"},
["yzg"] = {"E'ma Buyang"},
["yzk"] = {"Zokhuo"},
["zaa"] = {"Sierra de Juárez Zapotec"},
["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"},
["zac"] = {"Ocotlán Zapotec"},
["zad"] = {"Cajonos Zapotec"},
["zae"] = {"Yareni Zapotec"},
["zaf"] = {"Ayoquesco Zapotec"},
["zag"] = {"Zaghawa"},
["zah"] = {"Zangwal"},
["zai"] = {"Isthmus Zapotec"},
["zaj"] = {"Zaramo"},
["zak"] = {"Zanaki"},
["zal"] = {"Zauzou"},
["zam"] = {"Miahuatlán Zapotec"},
["zao"] = {"Ozolotepec Zapotec"},
["zap"] = {"Zapotec"},
["zaq"] = {"Aloápam Zapotec"},
["zar"] = {"Rincón Zapotec"},
["zas"] = {"Santo Domingo Albarradas Zapotec"},
["zat"] = {"Tabaa Zapotec"},
["zau"] = {"Zangskari"},
["zav"] = {"Yatzachi Zapotec"},
["zaw"] = {"Mitla Zapotec"},
["zax"] = {"Xadani Zapotec"},
["zay"] = {"Zayse-Zergulla", "Zaysete"},
["zaz"] = {"Zari"},
["zba"] = {"Balaibalan"},
["zbc"] = {"Central Berawan"},
["zbe"] = {"East Berawan"},
["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"},
["zbt"] = {"Batui"},
["zbu"] = {"Bu (Bauchi State)"},
["zbw"] = {"West Berawan"},
["zca"] = {"Coatecas Altas Zapotec"},
["zcd"] = {"Las Delicias Zapotec"},
["zch"] = {"Central Hongshuihe Zhuang"},
["zdj"] = {"Ngazidja Comorian"},
["zea"] = {"Zeeuws"},
["zeg"] = {"Zenag"},
["zeh"] = {"Eastern Hongshuihe Zhuang"},
["zem"] = {"Zeem"},
["zen"] = {"Zenaga"},
["zga"] = {"Kinga"},
["zgb"] = {"Guibei Zhuang"},
["zgh"] = {"Standard Moroccan Tamazight"},
["zgm"] = {"Minz Zhuang"},
["zgn"] = {"Guibian Zhuang"},
["zgr"] = {"Magori"},
["zhb"] = {"Zhaba"},
["zhd"] = {"Dai Zhuang"},
["zhi"] = {"Zhire"},
["zhn"] = {"Nong Zhuang"},
["zhw"] = {"Zhoa"},
["zhx"] = {"Chinese (family)"},
["zia"] = {"Zia"},
["zib"] = {"Zimbabwe Sign Language"},
["zik"] = {"Zimakani"},
["zil"] = {"Zialo"},
["zim"] = {"Mesme"},
["zin"] = {"Zinza"},
["ziw"] = {"Zigula"},
["ziz"] = {"Zizilivakan"},
["zka"] = {"Kaimbulawa"},
["zkd"] = {"Kadu"},
["zkg"] = {"Koguryo"},
["zkh"] = {"Khorezmian"},
["zkk"] = {"Karankawa"},
["zkn"] = {"Kanan"},
["zko"] = {"Kott"},
["zkp"] = {"São Paulo Kaingáng"},
["zkr"] = {"Zakhring"},
["zkt"] = {"Kitan"},
["zku"] = {"Kaurna"},
["zkv"] = {"Krevinian"},
["zkz"] = {"Khazar"},
["zla"] = {"Zula"},
["zle"] = {"East Slavic languages"},
["zlj"] = {"Liujiang Zhuang"},
["zlm"] = {"Malay (individual language)"},
["zln"] = {"Lianshan Zhuang"},
["zlq"] = {"Liuqian Zhuang"},
["zls"] = {"South Slavic languages"},
["zlu"] = {"Zul"},
["zlw"] = {"West Slavic languages"},
["zma"] = {"Manda (Australia)"},
["zmb"] = {"Zimba"},
["zmc"] = {"Margany"},
["zmd"] = {"Maridan"},
["zme"] = {"Mangerr"},
["zmf"] = {"Mfinu"},
["zmg"] = {"Marti Ke"},
["zmh"] = {"Makolkol"},
["zmi"] = {"Negeri Sembilan Malay"},
["zmj"] = {"Maridjabin"},
["zmk"] = {"Mandandanyi"},
["zml"] = {"Matngala"},
["zmm"] = {"Marimanindji", "Marramaninyshi"},
["zmn"] = {"Mbangwe"},
["zmo"] = {"Molo"},
["zmp"] = {"Mpuono"},
["zmq"] = {"Mituku"},
["zmr"] = {"Maranunggu"},
["zms"] = {"Mbesa"},
["zmt"] = {"Maringarr"},
["zmu"] = {"Muruwari"},
["zmv"] = {"Mbariman-Gudhinma"},
["zmw"] = {"Mbo (Democratic Republic of Congo)"},
["zmx"] = {"Bomitaba"},
["zmy"] = {"Mariyedi"},
["zmz"] = {"Mbandja"},
["zna"] = {"Zan Gula"},
["znd"] = {"Zande languages"},
["zne"] = {"Zande (individual language)"},
["zng"] = {"Mang"},
["znk"] = {"Manangkari"},
["zns"] = {"Mangas"},
["zoc"] = {"Copainalá Zoque"},
["zoh"] = {"Chimalapa Zoque"},
["zom"] = {"Zou"},
["zoo"] = {"Asunción Mixtepec Zapotec"},
["zoq"] = {"Tabasco Zoque"},
["zor"] = {"Rayón Zoque"},
["zos"] = {"Francisco León Zoque"},
["zpa"] = {"Lachiguiri Zapotec"},
["zpb"] = {"Yautepec Zapotec"},
["zpc"] = {"Choapan Zapotec"},
["zpd"] = {"Southeastern Ixtlán Zapotec"},
["zpe"] = {"Petapa Zapotec"},
["zpf"] = {"San Pedro Quiatoni Zapotec"},
["zpg"] = {"Guevea De Humboldt Zapotec"},
["zph"] = {"Totomachapan Zapotec"},
["zpi"] = {"Santa María Quiegolani Zapotec"},
["zpj"] = {"Quiavicuzas Zapotec"},
["zpk"] = {"Tlacolulita Zapotec"},
["zpl"] = {"Lachixío Zapotec"},
["zpm"] = {"Mixtepec Zapotec"},
["zpn"] = {"Santa Inés Yatzechi Zapotec"},
["zpo"] = {"Amatlán Zapotec"},
["zpp"] = {"El Alto Zapotec"},
["zpq"] = {"Zoogocho Zapotec"},
["zpr"] = {"Santiago Xanica Zapotec"},
["zps"] = {"Coatlán Zapotec"},
["zpt"] = {"San Vicente Coatlán Zapotec"},
["zpu"] = {"Yalálag Zapotec"},
["zpv"] = {"Chichicapan Zapotec"},
["zpw"] = {"Zaniza Zapotec"},
["zpx"] = {"San Baltazar Loxicha Zapotec"},
["zpy"] = {"Mazaltepec Zapotec"},
["zpz"] = {"Texmelucan Zapotec"},
["zqe"] = {"Qiubei Zhuang"},
["zra"] = {"Kara (Korea)"},
["zrg"] = {"Mirgan"},
["zrn"] = {"Zerenkel"},
["zro"] = {"Záparo"},
["zrp"] = {"Zarphatic"},
["zrs"] = {"Mairasi"},
["zsa"] = {"Sarasira"},
["zsk"] = {"Kaskean"},
["zsl"] = {"Zambian Sign Language"},
["zsm"] = {"Standard Malay"},
["zsr"] = {"Southern Rincon Zapotec"},
["zsu"] = {"Sukurum"},
["zte"] = {"Elotepec Zapotec"},
["ztg"] = {"Xanaguía Zapotec"},
["ztl"] = {"Lapaguía-Guivini Zapotec"},
["ztm"] = {"San Agustín Mixtepec Zapotec"},
["ztn"] = {"Santa Catarina Albarradas Zapotec"},
["ztp"] = {"Loxicha Zapotec"},
["ztq"] = {"Quioquitani-Quierí Zapotec"},
["zts"] = {"Tilquiapan Zapotec"},
["ztt"] = {"Tejalapan Zapotec"},
["ztu"] = {"Güilá Zapotec"},
["ztx"] = {"Zaachila Zapotec"},
["zty"] = {"Yatee Zapotec"},
["zuh"] = {"Tokano"},
["zum"] = {"Kumzari"},
["zun"] = {"Zuni"},
["zuy"] = {"Zumaya"},
["zwa"] = {"Zay"},
["zxx"] = {"No linguistic content", "Not applicable"},
["zyb"] = {"Yongbei Zhuang"},
["zyg"] = {"Yang Zhuang"},
["zyj"] = {"Youjiang Zhuang"},
["zyn"] = {"Yongnan Zhuang"},
["zyp"] = {"Zyphe Chin"},
["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"},
["zzj"] = {"Zuojiang Zhuang"}
}
local deprecated = {
["in"] = {"Indonesian"},
["iw"] = {"Hebrew"},
["ji"] = {"Yiddish"},
["jw"] = {"Javanese"},
["mo"] = {"Moldavian", "Moldovan"},
["aam"] = {"Aramanik"},
["adp"] = {"Adap"},
["agp"] = {"Paranan"},
["ais"] = {"Nataoran Amis"},
["ajp"] = {"South Levantine Arabic"},
["ajt"] = {"Judeo-Tunisian Arabic"},
["aoh"] = {"Arma"},
["asd"] = {"Asas"},
["aue"] = {"ǂKxʼauǁʼein"},
["ayx"] = {"Ayi (China)"},
["ayy"] = {"Tayabas Ayta"},
["baz"] = {"Tunen"},
["bbz"] = {"Babalia Creole Arabic"},
["bgm"] = {"Baga Mboteni"},
["bhk"] = {"Albay Bicolano"},
["bic"] = {"Bikaru"},
["bij"] = {"Vaghat-Ya-Bijim-Legeri"},
["bjd"] = {"Bandjigali"},
["bjq"] = {"Southern Betsimisaraka Malagasy"},
["bkb"] = {"Finallig"},
["blg"] = {"Balau"},
["bmy"] = {"Bemba (Democratic Republic of Congo)"},
["bpb"] = {"Barbacoas"},
["btb"] = {"Beti (Cameroon)"},
["btl"] = {"Bhatola"},
["bxx"] = {"Borna (Democratic Republic of Congo)"},
["byy"] = {"Buya"},
["cbe"] = {"Chipiajes"},
["cbh"] = {"Cagua"},
["cca"] = {"Cauca"},
["ccq"] = {"Chaungtha"},
["cdg"] = {"Chamari"},
["cjr"] = {"Chorotega"},
["cka"] = {"Khumi Awa Chin"},
["cmk"] = {"Chimakum"},
["coy"] = {"Coyaima"},
["cqu"] = {"Chilean Quechua"},
["cug"] = {"Chungmboko", "Cung"},
["cum"] = {"Cumeral"},
["daf"] = {"Dan"},
["dap"] = {"Nisi (India)"},
["dgu"] = {"Degaru"},
["dha"] = {"Dhanwar (India)"},
["dit"] = {"Dirari"},
["djl"] = {"Djiwarli"},
["dkl"] = {"Kolum So Dogon"},
["drh"] = {"Darkhat"},
["drr"] = {"Dororo"},
["drw"] = {"Darwazi"},
["dud"] = {"Hun-Saare"},
["duj"] = {"Dhuwal"},
["dwl"] = {"Walo Kumbe Dogon"},
["ekc"] = {"Eastern Karnic"},
["elp"] = {"Elpaputih"},
["emo"] = {"Emok"},
["gav"] = {"Gabutamon"},
["gbc"] = {"Garawa"},
["gfx"] = {"Mangetti Dune ǃXung"},
["ggn"] = {"Eastern Gurung"},
["ggo"] = {"Southern Gondi"},
["ggr"] = {"Aghu Tharnggalu"},
["gio"] = {"Gelao"},
["gji"] = {"Geji"},
["gli"] = {"Guliguli"},
["gti"] = {"Gbati-ri"},
["guv"] = {"Gey"},
["hrr"] = {"Horuru"},
["iap"] = {"Iapama"},
["ibi"] = {"Ibilo"},
["ill"] = {"Iranun"},
["ilw"] = {"Talur"},
["ime"] = {"Imeraguen"},
["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"},
["jar"] = {"Jarawa (Nigeria)"},
["jeg"] = {"Jeng"},
["kbf"] = {"Kakauhua"},
["kdv"] = {"Kado"},
["kgc"] = {"Kasseng"},
["kgd"] = {"Kataang"},
["kgh"] = {"Upper Tanudan Kalinga"},
["kgm"] = {"Karipúna"},
["kjf"] = {"Khalaj [Indo-Iranian]"},
["koj"] = {"Sara Dunjo"},
["kox"] = {"Coxima"},
["kpp"] = {"Paku Karen"},
["krm"] = {"Krim"},
["ksa"] = {"Shuwa-Zamani"},
["ktr"] = {"Kota Marudu Tinagas"},
["kvs"] = {"Kunggara"},
["kwq"] = {"Kwak"},
["kxe"] = {"Kakihum"},
["kxl"] = {"Nepali Kurux"},
["kxu"] = {"Kui (India)"},
["kzh"] = {"Kenuzi-Dongola"},
["kzj"] = {"Coastal Kadazan"},
["kzt"] = {"Tambunan Dusun"},
["lak"] = {"Laka (Nigeria)"},
["lba"] = {"Lui"},
["leg"] = {"Lengua"},
["lii"] = {"Lingkhim"},
["llo"] = {"Khlor"},
["lmm"] = {"Lamam"},
["lmz"] = {"Lumbee"},
["lno"] = {"Lango (South Sudan)"},
["lsg"] = {"Lyons Sign Language"},
["meg"] = {"Mea"},
["mgx"] = {"Omati"},
["mhh"] = {"Maskoy Pidgin"},
["mja"] = {"Mahei"},
["mld"] = {"Malakhel"},
["mnt"] = {"Maykulan"},
["mof"] = {"Mohegan-Montauk-Narragansett"},
["mst"] = {"Cataelano Mandaya"},
["mvm"] = {"Muya"},
["mwd"] = {"Mudbura"},
["mwj"] = {"Maligo"},
["mwx"] = {"Mediak"},
["mwy"] = {"Mosiro"},
["myd"] = {"Maramba"},
["myi"] = {"Mina (India)"},
["myq"] = {"Forest Maninka"},
["myt"] = {"Sangab Mandaya"},
["nad"] = {"Nijadali"},
["nbf"] = {"Naxi"},
["nbx"] = {"Ngura"},
["ncp"] = {"Ndaktup"},
["ngo"] = {"Ngoni"},
["nln"] = {"Durango Nahuatl"},
["nlr"] = {"Ngarla"},
["nns"] = {"Ningye"},
["nnx"] = {"Ngong"},
["nom"] = {"Nocamán"},
["noo"] = {"Nootka"},
["nts"] = {"Natagaimas"},
["nxu"] = {"Narau"},
["ome"] = {"Omejes"},
["oun"] = {"ǃOǃung"},
["pat"] = {"Papitalai"},
["pbz"] = {"Palu"},
["pcr"] = {"Panang"},
["pgy"] = {"Pongyong"},
["pii"] = {"Pini"},
["plj"] = {"Polci"},
["plp"] = {"Palpa"},
["pmc"] = {"Palumata"},
["pmk"] = {"Pamlico"},
["pmu"] = {"Mirpur Panjabi"},
["pod"] = {"Ponares"},
["ppa"] = {"Pao"},
["ppr"] = {"Piru"},
["prb"] = {"Lua'"},
["prp"] = {"Parsi"},
["pry"] = {"Pray 3"},
["puk"] = {"Pu Ko"},
["puz"] = {"Purum Naga"},
["rie"] = {"Rien"},
["rmr"] = {"Caló"},
["rna"] = {"Runa"},
["rsi"] = {"Rennellese Sign Language"},
["sap"] = {"Sanapaná"},
["sca"] = {"Sansu"},
["sdm"] = {"Semandang"},
["sgl"] = {"Sanglechi-Ishkashimi"},
["sgo"] = {"Songa"},
["skk"] = {"Sok"},
["slq"] = {"Salchuq"},
["smd"] = {"Sama"},
["snb"] = {"Sebuyau"},
["snh"] = {"Shinabo"},
["sul"] = {"Surigaonon"},
["sum"] = {"Sumo-Mayangna"},
["svr"] = {"Savara"},
["szd"] = {"Seru"},
["tbb"] = {"Tapeba"},
["tdu"] = {"Tempasuk Dusun"},
["tgg"] = {"Tangga"},
["thc"] = {"Tai Hang Tong"},
["thw"] = {"Thudam"},
["thx"] = {"The"},
["tid"] = {"Tidong"},
["tie"] = {"Tingal"},
["tkk"] = {"Takpa"},
["tlw"] = {"South Wemale"},
["tmk"] = {"Northwestern Tamang"},
["tmp"] = {"Tai Mène"},
["tne"] = {"Tinoc Kallahan"},
["tnf"] = {"Tangshewi"},
["toe"] = {"Tomedes"},
["tpw"] = {"Tupí"},
["tsf"] = {"Southwestern Tamang"},
["unp"] = {"Worora"},
["uok"] = {"Uokha"},
["uun"] = {"Kulon-Pazeh"},
["vki"] = {"Ija-Zuba"},
["wgw"] = {"Wagawaga"},
["wit"] = {"Wintu"},
["wiw"] = {"Wirangu"},
["wra"] = {"Warapu"},
["wrd"] = {"Warduji"},
["wya"] = {"Wyandot"},
["xba"] = {"Kamba (Brazil)"},
["xbx"] = {"Kabixí"},
["xia"] = {"Xiandao"},
["xip"] = {"Xipináwa"},
["xkh"] = {"Karahawyana"},
["xrq"] = {"Karranga"},
["xss"] = {"Assan"},
["xtz"] = {"Tasmanian"},
["ybd"] = {"Yangbye"},
["yds"] = {"Yiddish Sign Language"},
["yen"] = {"Yendang"},
["yiy"] = {"Yir Yoront"},
["yma"] = {"Yamphe"},
["ymt"] = {"Mator-Taygi-Karagas"},
["ynh"] = {"Yangho"},
["yos"] = {"Yos"},
["yri"] = {"Yarí"},
["yuu"] = {"Yugh"},
["zir"] = {"Ziriya"},
["zkb"] = {"Koibal"},
["zua"] = {"Zeem"}
}
return {
active = active,
deprecated = deprecated,
}
90939c58de6a6d2fcd35fcf808d04acfa67bc8fd
Module:Language/data/iana scripts
828
241
707
706
2023-06-06T18:16:29Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Language/data/iana_scripts]]: w
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["Adlm"] = {"Adlam"},
["Afak"] = {"Afaka"},
["Aghb"] = {"Caucasian Albanian"},
["Ahom"] = {"Ahom", "Tai Ahom"},
["Arab"] = {"Arabic"},
["Aran"] = {"Arabic (Nastaliq variant)"},
["Armi"] = {"Imperial Aramaic"},
["Armn"] = {"Armenian"},
["Avst"] = {"Avestan"},
["Bali"] = {"Balinese"},
["Bamu"] = {"Bamum"},
["Bass"] = {"Bassa Vah"},
["Batk"] = {"Batak"},
["Beng"] = {"Bengali", "Bangla"},
["Bhks"] = {"Bhaiksuki"},
["Blis"] = {"Blissymbols"},
["Bopo"] = {"Bopomofo"},
["Brah"] = {"Brahmi"},
["Brai"] = {"Braille"},
["Bugi"] = {"Buginese"},
["Buhd"] = {"Buhid"},
["Cakm"] = {"Chakma"},
["Cans"] = {"Unified Canadian Aboriginal Syllabics"},
["Cari"] = {"Carian"},
["Cham"] = {"Cham"},
["Cher"] = {"Cherokee"},
["Chrs"] = {"Chorasmian"},
["Cirt"] = {"Cirth"},
["Copt"] = {"Coptic"},
["Cpmn"] = {"Cypro-Minoan"},
["Cprt"] = {"Cypriot syllabary"},
["Cyrl"] = {"Cyrillic"},
["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"},
["Deva"] = {"Devanagari", "Nagari"},
["Diak"] = {"Dives Akuru"},
["Dogr"] = {"Dogra"},
["Dsrt"] = {"Deseret", "Mormon"},
["Dupl"] = {"Duployan shorthand", "Duployan stenography"},
["Egyd"] = {"Egyptian demotic"},
["Egyh"] = {"Egyptian hieratic"},
["Egyp"] = {"Egyptian hieroglyphs"},
["Elba"] = {"Elbasan"},
["Elym"] = {"Elymaic"},
["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"},
["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"},
["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"},
["Glag"] = {"Glagolitic"},
["Gong"] = {"Gunjala Gondi"},
["Gonm"] = {"Masaram Gondi"},
["Goth"] = {"Gothic"},
["Gran"] = {"Grantha"},
["Grek"] = {"Greek"},
["Gujr"] = {"Gujarati"},
["Guru"] = {"Gurmukhi"},
["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"},
["Hang"] = {"Hangul", "Hangŭl", "Hangeul"},
["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"},
["Hano"] = {"Hanunoo", "Hanunóo"},
["Hans"] = {"Han (Simplified variant)"},
["Hant"] = {"Han (Traditional variant)"},
["Hatr"] = {"Hatran"},
["Hebr"] = {"Hebrew"},
["Hira"] = {"Hiragana"},
["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"},
["Hmng"] = {"Pahawh Hmong"},
["Hmnp"] = {"Nyiakeng Puachue Hmong"},
["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"},
["Hung"] = {"Old Hungarian", "Hungarian Runic"},
["Inds"] = {"Indus", "Harappan"},
["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"},
["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"},
["Java"] = {"Javanese"},
["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"},
["Jurc"] = {"Jurchen"},
["Kali"] = {"Kayah Li"},
["Kana"] = {"Katakana"},
["Kawi"] = {"Kawi"},
["Khar"] = {"Kharoshthi"},
["Khmr"] = {"Khmer"},
["Khoj"] = {"Khojki"},
["Kitl"] = {"Khitan large script"},
["Kits"] = {"Khitan small script"},
["Knda"] = {"Kannada"},
["Kore"] = {"Korean (alias for Hangul + Han)"},
["Kpel"] = {"Kpelle"},
["Kthi"] = {"Kaithi"},
["Lana"] = {"Tai Tham", "Lanna"},
["Laoo"] = {"Lao"},
["Latf"] = {"Latin (Fraktur variant)"},
["Latg"] = {"Latin (Gaelic variant)"},
["Latn"] = {"Latin"},
["Leke"] = {"Leke"},
["Lepc"] = {"Lepcha", "Róng"},
["Limb"] = {"Limbu"},
["Lina"] = {"Linear A"},
["Linb"] = {"Linear B"},
["Lisu"] = {"Lisu", "Fraser"},
["Loma"] = {"Loma"},
["Lyci"] = {"Lycian"},
["Lydi"] = {"Lydian"},
["Mahj"] = {"Mahajani"},
["Maka"] = {"Makasar"},
["Mand"] = {"Mandaic", "Mandaean"},
["Mani"] = {"Manichaean"},
["Marc"] = {"Marchen"},
["Maya"] = {"Mayan hieroglyphs"},
["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"},
["Mend"] = {"Mende Kikakui"},
["Merc"] = {"Meroitic Cursive"},
["Mero"] = {"Meroitic Hieroglyphs"},
["Mlym"] = {"Malayalam"},
["Modi"] = {"Modi", "Moḍī"},
["Mong"] = {"Mongolian"},
["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"},
["Mroo"] = {"Mro", "Mru"},
["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"},
["Mult"] = {"Multani"},
["Mymr"] = {"Myanmar", "Burmese"},
["Nagm"] = {"Nag Mundari"},
["Nand"] = {"Nandinagari"},
["Narb"] = {"Old North Arabian", "Ancient North Arabian"},
["Nbat"] = {"Nabataean"},
["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"},
["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"},
["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"},
["Nkoo"] = {"N’Ko", "N'Ko"},
["Nshu"] = {"Nüshu"},
["Ogam"] = {"Ogham"},
["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"},
["Orkh"] = {"Old Turkic", "Orkhon Runic"},
["Orya"] = {"Oriya", "Odia"},
["Osge"] = {"Osage"},
["Osma"] = {"Osmanya"},
["Ougr"] = {"Old Uyghur"},
["Palm"] = {"Palmyrene"},
["Pauc"] = {"Pau Cin Hau"},
["Pcun"] = {"Proto-Cuneiform"},
["Pelm"] = {"Proto-Elamite"},
["Perm"] = {"Old Permic"},
["Phag"] = {"Phags-pa"},
["Phli"] = {"Inscriptional Pahlavi"},
["Phlp"] = {"Psalter Pahlavi"},
["Phlv"] = {"Book Pahlavi"},
["Phnx"] = {"Phoenician"},
["Piqd"] = {"Klingon (KLI pIqaD)"},
["Plrd"] = {"Miao", "Pollard"},
["Prti"] = {"Inscriptional Parthian"},
["Psin"] = {"Proto-Sinaitic"},
["Ranj"] = {"Ranjana"},
["Rjng"] = {"Rejang", "Redjang", "Kaganga"},
["Rohg"] = {"Hanifi Rohingya"},
["Roro"] = {"Rongorongo"},
["Runr"] = {"Runic"},
["Samr"] = {"Samaritan"},
["Sara"] = {"Sarati"},
["Sarb"] = {"Old South Arabian"},
["Saur"] = {"Saurashtra"},
["Sgnw"] = {"SignWriting"},
["Shaw"] = {"Shavian", "Shaw"},
["Shrd"] = {"Sharada", "Śāradā"},
["Shui"] = {"Shuishu"},
["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"},
["Sind"] = {"Khudawadi", "Sindhi"},
["Sinh"] = {"Sinhala"},
["Sogd"] = {"Sogdian"},
["Sogo"] = {"Old Sogdian"},
["Sora"] = {"Sora Sompeng"},
["Soyo"] = {"Soyombo"},
["Sund"] = {"Sundanese"},
["Sunu"] = {"Sunuwar"},
["Sylo"] = {"Syloti Nagri"},
["Syrc"] = {"Syriac"},
["Syre"] = {"Syriac (Estrangelo variant)"},
["Syrj"] = {"Syriac (Western variant)"},
["Syrn"] = {"Syriac (Eastern variant)"},
["Tagb"] = {"Tagbanwa"},
["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"},
["Tale"] = {"Tai Le"},
["Talu"] = {"New Tai Lue"},
["Taml"] = {"Tamil"},
["Tang"] = {"Tangut"},
["Tavt"] = {"Tai Viet"},
["Telu"] = {"Telugu"},
["Teng"] = {"Tengwar"},
["Tfng"] = {"Tifinagh", "Berber"},
["Tglg"] = {"Tagalog", "Baybayin", "Alibata"},
["Thaa"] = {"Thaana"},
["Thai"] = {"Thai"},
["Tibt"] = {"Tibetan"},
["Tirh"] = {"Tirhuta"},
["Tnsa"] = {"Tangsa"},
["Toto"] = {"Toto"},
["Ugar"] = {"Ugaritic"},
["Vaii"] = {"Vai"},
["Visp"] = {"Visible Speech"},
["Vith"] = {"Vithkuqi"},
["Wara"] = {"Warang Citi", "Varang Kshiti"},
["Wcho"] = {"Wancho"},
["Wole"] = {"Woleai"},
["Xpeo"] = {"Old Persian"},
["Xsux"] = {"Sumero-Akkadian cuneiform"},
["Yezi"] = {"Yezidi"},
["Yiii"] = {"Yi"},
["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"},
["Zinh"] = {"Code for inherited script"},
["Zmth"] = {"Mathematical notation"},
["Zsye"] = {"Symbols (Emoji variant)"},
["Zsym"] = {"Symbols"},
["Zxxx"] = {"Code for unwritten documents"},
["Zyyy"] = {"Code for undetermined script"},
["Zzzz"] = {"Code for uncoded script"}
}
279ed2c472c8154d84ff2ea23c214e64c168d7e9
Module:Language/data/iana regions
828
242
709
708
2023-06-06T18:16:29Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Language/data/iana_regions]]: w
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["AC"] = {"Ascension Island"},
["AD"] = {"Andorra"},
["AE"] = {"United Arab Emirates"},
["AF"] = {"Afghanistan"},
["AG"] = {"Antigua and Barbuda"},
["AI"] = {"Anguilla"},
["AL"] = {"Albania"},
["AM"] = {"Armenia"},
["AO"] = {"Angola"},
["AQ"] = {"Antarctica"},
["AR"] = {"Argentina"},
["AS"] = {"American Samoa"},
["AT"] = {"Austria"},
["AU"] = {"Australia"},
["AW"] = {"Aruba"},
["AX"] = {"Åland Islands"},
["AZ"] = {"Azerbaijan"},
["BA"] = {"Bosnia and Herzegovina"},
["BB"] = {"Barbados"},
["BD"] = {"Bangladesh"},
["BE"] = {"Belgium"},
["BF"] = {"Burkina Faso"},
["BG"] = {"Bulgaria"},
["BH"] = {"Bahrain"},
["BI"] = {"Burundi"},
["BJ"] = {"Benin"},
["BL"] = {"Saint Barthélemy"},
["BM"] = {"Bermuda"},
["BN"] = {"Brunei Darussalam"},
["BO"] = {"Bolivia"},
["BQ"] = {"Bonaire, Sint Eustatius and Saba"},
["BR"] = {"Brazil"},
["BS"] = {"Bahamas"},
["BT"] = {"Bhutan"},
["BV"] = {"Bouvet Island"},
["BW"] = {"Botswana"},
["BY"] = {"Belarus"},
["BZ"] = {"Belize"},
["CA"] = {"Canada"},
["CC"] = {"Cocos (Keeling) Islands"},
["CD"] = {"The Democratic Republic of the Congo"},
["CF"] = {"Central African Republic"},
["CG"] = {"Congo"},
["CH"] = {"Switzerland"},
["CI"] = {"Côte d'Ivoire"},
["CK"] = {"Cook Islands"},
["CL"] = {"Chile"},
["CM"] = {"Cameroon"},
["CN"] = {"China"},
["CO"] = {"Colombia"},
["CP"] = {"Clipperton Island"},
["CQ"] = {"Sark"},
["CR"] = {"Costa Rica"},
["CU"] = {"Cuba"},
["CV"] = {"Cabo Verde", "Cape Verde"},
["CW"] = {"Curaçao"},
["CX"] = {"Christmas Island"},
["CY"] = {"Cyprus"},
["CZ"] = {"Czechia", "Czech Republic"},
["DE"] = {"Germany"},
["DG"] = {"Diego Garcia"},
["DJ"] = {"Djibouti"},
["DK"] = {"Denmark"},
["DM"] = {"Dominica"},
["DO"] = {"Dominican Republic"},
["DZ"] = {"Algeria"},
["EA"] = {"Ceuta, Melilla"},
["EC"] = {"Ecuador"},
["EE"] = {"Estonia"},
["EG"] = {"Egypt"},
["EH"] = {"Western Sahara"},
["ER"] = {"Eritrea"},
["ES"] = {"Spain"},
["ET"] = {"Ethiopia"},
["EU"] = {"European Union"},
["EZ"] = {"Eurozone"},
["FI"] = {"Finland"},
["FJ"] = {"Fiji"},
["FK"] = {"Falkland Islands (Malvinas)"},
["FM"] = {"Federated States of Micronesia"},
["FO"] = {"Faroe Islands"},
["FR"] = {"France"},
["GA"] = {"Gabon"},
["GB"] = {"United Kingdom"},
["GD"] = {"Grenada"},
["GE"] = {"Georgia"},
["GF"] = {"French Guiana"},
["GG"] = {"Guernsey"},
["GH"] = {"Ghana"},
["GI"] = {"Gibraltar"},
["GL"] = {"Greenland"},
["GM"] = {"Gambia"},
["GN"] = {"Guinea"},
["GP"] = {"Guadeloupe"},
["GQ"] = {"Equatorial Guinea"},
["GR"] = {"Greece"},
["GS"] = {"South Georgia and the South Sandwich Islands"},
["GT"] = {"Guatemala"},
["GU"] = {"Guam"},
["GW"] = {"Guinea-Bissau"},
["GY"] = {"Guyana"},
["HK"] = {"Hong Kong"},
["HM"] = {"Heard Island and McDonald Islands"},
["HN"] = {"Honduras"},
["HR"] = {"Croatia"},
["HT"] = {"Haiti"},
["HU"] = {"Hungary"},
["IC"] = {"Canary Islands"},
["ID"] = {"Indonesia"},
["IE"] = {"Ireland"},
["IL"] = {"Israel"},
["IM"] = {"Isle of Man"},
["IN"] = {"India"},
["IO"] = {"British Indian Ocean Territory"},
["IQ"] = {"Iraq"},
["IR"] = {"Islamic Republic of Iran"},
["IS"] = {"Iceland"},
["IT"] = {"Italy"},
["JE"] = {"Jersey"},
["JM"] = {"Jamaica"},
["JO"] = {"Jordan"},
["JP"] = {"Japan"},
["KE"] = {"Kenya"},
["KG"] = {"Kyrgyzstan"},
["KH"] = {"Cambodia"},
["KI"] = {"Kiribati"},
["KM"] = {"Comoros"},
["KN"] = {"Saint Kitts and Nevis"},
["KP"] = {"Democratic People's Republic of Korea"},
["KR"] = {"Republic of Korea"},
["KW"] = {"Kuwait"},
["KY"] = {"Cayman Islands"},
["KZ"] = {"Kazakhstan"},
["LA"] = {"Lao People's Democratic Republic"},
["LB"] = {"Lebanon"},
["LC"] = {"Saint Lucia"},
["LI"] = {"Liechtenstein"},
["LK"] = {"Sri Lanka"},
["LR"] = {"Liberia"},
["LS"] = {"Lesotho"},
["LT"] = {"Lithuania"},
["LU"] = {"Luxembourg"},
["LV"] = {"Latvia"},
["LY"] = {"Libya"},
["MA"] = {"Morocco"},
["MC"] = {"Monaco"},
["MD"] = {"Moldova"},
["ME"] = {"Montenegro"},
["MF"] = {"Saint Martin (French part)"},
["MG"] = {"Madagascar"},
["MH"] = {"Marshall Islands"},
["MK"] = {"North Macedonia"},
["ML"] = {"Mali"},
["MM"] = {"Myanmar"},
["MN"] = {"Mongolia"},
["MO"] = {"Macao"},
["MP"] = {"Northern Mariana Islands"},
["MQ"] = {"Martinique"},
["MR"] = {"Mauritania"},
["MS"] = {"Montserrat"},
["MT"] = {"Malta"},
["MU"] = {"Mauritius"},
["MV"] = {"Maldives"},
["MW"] = {"Malawi"},
["MX"] = {"Mexico"},
["MY"] = {"Malaysia"},
["MZ"] = {"Mozambique"},
["NA"] = {"Namibia"},
["NC"] = {"New Caledonia"},
["NE"] = {"Niger"},
["NF"] = {"Norfolk Island"},
["NG"] = {"Nigeria"},
["NI"] = {"Nicaragua"},
["NL"] = {"Netherlands"},
["NO"] = {"Norway"},
["NP"] = {"Nepal"},
["NR"] = {"Nauru"},
["NU"] = {"Niue"},
["NZ"] = {"New Zealand"},
["OM"] = {"Oman"},
["PA"] = {"Panama"},
["PE"] = {"Peru"},
["PF"] = {"French Polynesia"},
["PG"] = {"Papua New Guinea"},
["PH"] = {"Philippines"},
["PK"] = {"Pakistan"},
["PL"] = {"Poland"},
["PM"] = {"Saint Pierre and Miquelon"},
["PN"] = {"Pitcairn"},
["PR"] = {"Puerto Rico"},
["PS"] = {"State of Palestine"},
["PT"] = {"Portugal"},
["PW"] = {"Palau"},
["PY"] = {"Paraguay"},
["QA"] = {"Qatar"},
["RE"] = {"Réunion"},
["RO"] = {"Romania"},
["RS"] = {"Serbia"},
["RU"] = {"Russian Federation"},
["RW"] = {"Rwanda"},
["SA"] = {"Saudi Arabia"},
["SB"] = {"Solomon Islands"},
["SC"] = {"Seychelles"},
["SD"] = {"Sudan"},
["SE"] = {"Sweden"},
["SG"] = {"Singapore"},
["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"},
["SI"] = {"Slovenia"},
["SJ"] = {"Svalbard and Jan Mayen"},
["SK"] = {"Slovakia"},
["SL"] = {"Sierra Leone"},
["SM"] = {"San Marino"},
["SN"] = {"Senegal"},
["SO"] = {"Somalia"},
["SR"] = {"Suriname"},
["SS"] = {"South Sudan"},
["ST"] = {"Sao Tome and Principe"},
["SV"] = {"El Salvador"},
["SX"] = {"Sint Maarten (Dutch part)"},
["SY"] = {"Syrian Arab Republic"},
["SZ"] = {"Eswatini", "eSwatini", "Swaziland"},
["TA"] = {"Tristan da Cunha"},
["TC"] = {"Turks and Caicos Islands"},
["TD"] = {"Chad"},
["TF"] = {"French Southern Territories"},
["TG"] = {"Togo"},
["TH"] = {"Thailand"},
["TJ"] = {"Tajikistan"},
["TK"] = {"Tokelau"},
["TL"] = {"Timor-Leste"},
["TM"] = {"Turkmenistan"},
["TN"] = {"Tunisia"},
["TO"] = {"Tonga"},
["TR"] = {"Türkiye", "Turkey"},
["TT"] = {"Trinidad and Tobago"},
["TV"] = {"Tuvalu"},
["TW"] = {"Taiwan, Province of China"},
["TZ"] = {"United Republic of Tanzania"},
["UA"] = {"Ukraine"},
["UG"] = {"Uganda"},
["UM"] = {"United States Minor Outlying Islands"},
["UN"] = {"United Nations"},
["US"] = {"United States"},
["UY"] = {"Uruguay"},
["UZ"] = {"Uzbekistan"},
["VA"] = {"Holy See (Vatican City State)"},
["VC"] = {"Saint Vincent and the Grenadines"},
["VE"] = {"Venezuela"},
["VG"] = {"British Virgin Islands"},
["VI"] = {"U.S. Virgin Islands"},
["VN"] = {"Viet Nam"},
["VU"] = {"Vanuatu"},
["WF"] = {"Wallis and Futuna"},
["WS"] = {"Samoa"},
["YE"] = {"Yemen"},
["YT"] = {"Mayotte"},
["ZA"] = {"South Africa"},
["ZM"] = {"Zambia"},
["ZW"] = {"Zimbabwe"},
["001"] = {"World"},
["002"] = {"Africa"},
["003"] = {"North America"},
["005"] = {"South America"},
["009"] = {"Oceania"},
["011"] = {"Western Africa"},
["013"] = {"Central America"},
["014"] = {"Eastern Africa"},
["015"] = {"Northern Africa"},
["017"] = {"Middle Africa"},
["018"] = {"Southern Africa"},
["019"] = {"Americas"},
["021"] = {"Northern America"},
["029"] = {"Caribbean"},
["030"] = {"Eastern Asia"},
["034"] = {"Southern Asia"},
["035"] = {"South-Eastern Asia"},
["039"] = {"Southern Europe"},
["053"] = {"Australia and New Zealand"},
["054"] = {"Melanesia"},
["057"] = {"Micronesia"},
["061"] = {"Polynesia"},
["142"] = {"Asia"},
["143"] = {"Central Asia"},
["145"] = {"Western Asia"},
["150"] = {"Europe"},
["151"] = {"Eastern Europe"},
["154"] = {"Northern Europe"},
["155"] = {"Western Europe"},
["202"] = {"Sub-Saharan Africa"},
["419"] = {"Latin America and the Caribbean"}
}
9b8ad87e9a14bff745205a082bcd25cbcd8713ee
Module:Language/data/iana variants
828
243
711
710
2023-06-06T18:16:29Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Language/data/iana_variants]]: w
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["1606nict"] = {
["descriptions"] = {"Late Middle French (to 1606)"},
["prefixes"] = {"frm"},
},
["1694acad"] = {
["descriptions"] = {"Early Modern French"},
["prefixes"] = {"fr"},
},
["1901"] = {
["descriptions"] = {"Traditional German orthography"},
["prefixes"] = {"de"},
},
["1959acad"] = {
["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"},
["prefixes"] = {"be"},
},
["1994"] = {
["descriptions"] = {"Standardized Resian orthography"},
["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"},
},
["1996"] = {
["descriptions"] = {"German orthography of 1996"},
["prefixes"] = {"de"},
},
["abl1943"] = {
["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"},
["prefixes"] = {"pt-br"},
},
["akuapem"] = {
["descriptions"] = {"Akuapem Twi"},
["prefixes"] = {"tw"},
},
["alalc97"] = {
["descriptions"] = {"ALA-LC Romanization, 1997 edition"},
["prefixes"] = {},
},
["aluku"] = {
["descriptions"] = {"Aluku dialect", "Boni dialect"},
["prefixes"] = {"djk"},
},
["ao1990"] = {
["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"},
["prefixes"] = {"pt", "gl"},
},
["aranes"] = {
["descriptions"] = {"Aranese"},
["prefixes"] = {"oc"},
},
["arkaika"] = {
["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"},
["prefixes"] = {"eo"},
},
["asante"] = {
["descriptions"] = {"Asante Twi", "Ashanti Twi"},
["prefixes"] = {"tw"},
},
["auvern"] = {
["descriptions"] = {"Auvergnat"},
["prefixes"] = {"oc"},
},
["baku1926"] = {
["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"},
["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"},
},
["balanka"] = {
["descriptions"] = {"The Balanka dialect of Anii"},
["prefixes"] = {"blo"},
},
["barla"] = {
["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["basiceng"] = {
["descriptions"] = {"Basic English"},
["prefixes"] = {"en"},
},
["bauddha"] = {
["descriptions"] = {"Buddhist Hybrid Sanskrit"},
["prefixes"] = {"sa"},
},
["bciav"] = {
["descriptions"] = {"BCI Blissymbolics AV"},
["prefixes"] = {"zbl"},
},
["bcizbl"] = {
["descriptions"] = {"BCI Blissymbolics"},
["prefixes"] = {"zbl"},
},
["biscayan"] = {
["descriptions"] = {"Biscayan dialect of Basque"},
["prefixes"] = {"eu"},
},
["biske"] = {
["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["bohoric"] = {
["descriptions"] = {"Slovene in Bohorič alphabet"},
["prefixes"] = {"sl"},
},
["boont"] = {
["descriptions"] = {"Boontling"},
["prefixes"] = {"en"},
},
["bornholm"] = {
["descriptions"] = {"Bornholmsk"},
["prefixes"] = {"da"},
},
["cisaup"] = {
["descriptions"] = {"Cisalpine"},
["prefixes"] = {"oc"},
},
["colb1945"] = {
["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"},
["prefixes"] = {"pt"},
},
["cornu"] = {
["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"},
["prefixes"] = {"en"},
},
["creiss"] = {
["descriptions"] = {"Occitan variants of the Croissant area"},
["prefixes"] = {"oc"},
},
["dajnko"] = {
["descriptions"] = {"Slovene in Dajnko alphabet"},
["prefixes"] = {"sl"},
},
["ekavsk"] = {
["descriptions"] = {"Serbian with Ekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["emodeng"] = {
["descriptions"] = {"Early Modern English (1500-1700)"},
["prefixes"] = {"en"},
},
["fonipa"] = {
["descriptions"] = {"International Phonetic Alphabet"},
["prefixes"] = {},
},
["fonkirsh"] = {
["descriptions"] = {"Kirshenbaum Phonetic Alphabet"},
["prefixes"] = {},
},
["fonnapa"] = {
["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"},
["prefixes"] = {},
},
["fonupa"] = {
["descriptions"] = {"Uralic Phonetic Alphabet"},
["prefixes"] = {},
},
["fonxsamp"] = {
["descriptions"] = {"X-SAMPA transcription"},
["prefixes"] = {},
},
["gallo"] = {
["descriptions"] = {"Gallo"},
["prefixes"] = {"fr"},
},
["gascon"] = {
["descriptions"] = {"Gascon"},
["prefixes"] = {"oc"},
},
["grclass"] = {
["descriptions"] = {"Classical Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["grital"] = {
["descriptions"] = {"Italian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"},
},
["grmistr"] = {
["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["hepburn"] = {
["descriptions"] = {"Hepburn romanization"},
["prefixes"] = {"ja-latn"},
},
["hognorsk"] = {
["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"},
["prefixes"] = {"nn"},
},
["hsistemo"] = {
["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
},
["ijekavsk"] = {
["descriptions"] = {"Serbian with Ijekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["itihasa"] = {
["descriptions"] = {"Epic Sanskrit"},
["prefixes"] = {"sa"},
},
["ivanchov"] = {
["descriptions"] = {"Bulgarian in 1899 orthography"},
["prefixes"] = {"bg"},
},
["jauer"] = {
["descriptions"] = {"Jauer dialect of Romansh"},
["prefixes"] = {"rm"},
},
["jyutping"] = {
["descriptions"] = {"Jyutping Cantonese Romanization"},
["prefixes"] = {"yue"},
},
["kkcor"] = {
["descriptions"] = {"Common Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["kociewie"] = {
["descriptions"] = {"The Kociewie dialect of Polish"},
["prefixes"] = {"pl"},
},
["kscor"] = {
["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"},
["prefixes"] = {"kw"},
},
["laukika"] = {
["descriptions"] = {"Classical Sanskrit"},
["prefixes"] = {"sa"},
},
["lemosin"] = {
["descriptions"] = {"Limousin"},
["prefixes"] = {"oc"},
},
["lengadoc"] = {
["descriptions"] = {"Languedocien"},
["prefixes"] = {"oc"},
},
["lipaw"] = {
["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["ltg1929"] = {
["descriptions"] = {"The Latgalian language orthography codified in 1929"},
["prefixes"] = {"ltg"},
},
["ltg2007"] = {
["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"},
["prefixes"] = {"ltg"},
},
["luna1918"] = {
["descriptions"] = {"Post-1917 Russian orthography"},
["prefixes"] = {"ru"},
},
["metelko"] = {
["descriptions"] = {"Slovene in Metelko alphabet"},
["prefixes"] = {"sl"},
},
["monoton"] = {
["descriptions"] = {"Monotonic Greek"},
["prefixes"] = {"el"},
},
["ndyuka"] = {
["descriptions"] = {"Ndyuka dialect", "Aukan dialect"},
["prefixes"] = {"djk"},
},
["nedis"] = {
["descriptions"] = {"Natisone dialect", "Nadiza dialect"},
["prefixes"] = {"sl"},
},
["newfound"] = {
["descriptions"] = {"Newfoundland English"},
["prefixes"] = {"en-ca"},
},
["nicard"] = {
["descriptions"] = {"Niçard"},
["prefixes"] = {"oc"},
},
["njiva"] = {
["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["nulik"] = {
["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"},
["prefixes"] = {"vo"},
},
["osojs"] = {
["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["oxendict"] = {
["descriptions"] = {"Oxford English Dictionary spelling"},
["prefixes"] = {"en"},
},
["pahawh2"] = {
["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh3"] = {
["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh4"] = {
["descriptions"] = {"Pahawh Hmong Final Version orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pamaka"] = {
["descriptions"] = {"Pamaka dialect"},
["prefixes"] = {"djk"},
},
["peano"] = {
["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"},
["prefixes"] = {"la"},
},
["petr1708"] = {
["descriptions"] = {"Petrine orthography"},
["prefixes"] = {"ru"},
},
["pinyin"] = {
["descriptions"] = {"Pinyin romanization"},
["prefixes"] = {"zh-latn", "bo-latn"},
},
["polyton"] = {
["descriptions"] = {"Polytonic Greek"},
["prefixes"] = {"el"},
},
["provenc"] = {
["descriptions"] = {"Provençal"},
["prefixes"] = {"oc"},
},
["puter"] = {
["descriptions"] = {"Puter idiom of Romansh"},
["prefixes"] = {"rm"},
},
["rigik"] = {
["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"},
["prefixes"] = {"vo"},
},
["rozaj"] = {
["descriptions"] = {"Resian", "Resianic", "Rezijan"},
["prefixes"] = {"sl"},
},
["rumgr"] = {
["descriptions"] = {"Rumantsch Grischun"},
["prefixes"] = {"rm"},
},
["scotland"] = {
["descriptions"] = {"Scottish Standard English"},
["prefixes"] = {"en"},
},
["scouse"] = {
["descriptions"] = {"Scouse"},
["prefixes"] = {"en"},
},
["simple"] = {
["descriptions"] = {"Simplified form"},
["prefixes"] = {},
},
["solba"] = {
["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["sotav"] = {
["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["spanglis"] = {
["descriptions"] = {"Spanglish"},
["prefixes"] = {"en", "es"},
},
["surmiran"] = {
["descriptions"] = {"Surmiran idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sursilv"] = {
["descriptions"] = {"Sursilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sutsilv"] = {
["descriptions"] = {"Sutsilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["synnejyl"] = {
["descriptions"] = {"Synnejysk", "South Jutish"},
["prefixes"] = {"da"},
},
["tarask"] = {
["descriptions"] = {"Belarusian in Taraskievica orthography"},
["prefixes"] = {"be"},
},
["tongyong"] = {
["descriptions"] = {"Tongyong Pinyin romanization"},
["prefixes"] = {"zh-latn"},
},
["tunumiit"] = {
["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"},
["prefixes"] = {"kl"},
},
["uccor"] = {
["descriptions"] = {"Unified Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ucrcor"] = {
["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ulster"] = {
["descriptions"] = {"Ulster dialect of Scots"},
["prefixes"] = {"sco"},
},
["unifon"] = {
["descriptions"] = {"Unifon phonetic alphabet"},
["prefixes"] = {"en", "hup", "kyh", "tol", "yur"},
},
["vaidika"] = {
["descriptions"] = {"Vedic Sanskrit"},
["prefixes"] = {"sa"},
},
["valencia"] = {
["descriptions"] = {"Valencian"},
["prefixes"] = {"ca"},
},
["vallader"] = {
["descriptions"] = {"Vallader idiom of Romansh"},
["prefixes"] = {"rm"},
},
["vecdruka"] = {
["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"},
["prefixes"] = {"lv"},
},
["vivaraup"] = {
["descriptions"] = {"Vivaro-Alpine"},
["prefixes"] = {"oc"},
},
["wadegile"] = {
["descriptions"] = {"Wade-Giles romanization"},
["prefixes"] = {"zh-latn"},
},
["xsistemo"] = {
["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
}
}
6e18c8087ecffb70ab2722634deb5ede2d84fffa
Module:Language/data/iana suppressed scripts
828
244
713
712
2023-06-06T18:16:30Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Language/data/iana_suppressed_scripts]]: w
Scribunto
text/plain
-- File-Date: 2023-05-11
return {
["Arab"] = {"ar", "fa", "ps", "ur"},
["Armn"] = {"hy"},
["Beng"] = {"as", "bn"},
["Blis"] = {"zbl"},
["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"},
["Deva"] = {"hi", "mr", "ne", "kok", "mai"},
["Ethi"] = {"am", "ti"},
["Geor"] = {"ka"},
["Grek"] = {"el"},
["Gujr"] = {"gu"},
["Guru"] = {"pa"},
["Hebr"] = {"he", "iw", "yi"},
["Jpan"] = {"ja"},
["Khmr"] = {"km"},
["Knda"] = {"kn"},
["Kore"] = {"ko"},
["Laoo"] = {"lo"},
["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo",
"es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn",
"gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb",
"ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd",
"nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn",
"ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv",
"sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb",
"frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh",
"tpi", "tvl"},
["Mlym"] = {"ml"},
["Mymr"] = {"my"},
["Nkoo"] = {"nqo"},
["Orya"] = {"or"},
["Sinh"] = {"si"},
["Taml"] = {"ta"},
["Telu"] = {"te"},
["Thaa"] = {"dv"},
["Thai"] = {"th"},
["Tibt"] = {"dz"}
}
fd9ca3f5beaba5fdfc149a8d24e63fa3a9768f4f
Module:Lang/ISO 639 synonyms
828
245
715
714
2023-06-06T18:16:31Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Lang/ISO_639_synonyms]]: w
Scribunto
text/plain
-- File-Date: 2013-01-11
return {
["aar"] = "aa",
["abk"] = "ab",
["afr"] = "af",
["aka"] = "ak",
["amh"] = "am",
["ara"] = "ar",
["arg"] = "an",
["asm"] = "as",
["ava"] = "av",
["ave"] = "ae",
["aym"] = "ay",
["aze"] = "az",
["bak"] = "ba",
["bam"] = "bm",
["bel"] = "be",
["ben"] = "bn",
["bih"] = "bh",
["bis"] = "bi",
["bod"] = "bo",
["bos"] = "bs",
["bre"] = "br",
["bul"] = "bg",
["cat"] = "ca",
["ces"] = "cs",
["cha"] = "ch",
["che"] = "ce",
["chu"] = "cu",
["chv"] = "cv",
["cor"] = "kw",
["cos"] = "co",
["cre"] = "cr",
["cym"] = "cy",
["dan"] = "da",
["deu"] = "de",
["div"] = "dv",
["dzo"] = "dz",
["ell"] = "el",
["eng"] = "en",
["epo"] = "eo",
["est"] = "et",
["eus"] = "eu",
["ewe"] = "ee",
["fao"] = "fo",
["fas"] = "fa",
["fij"] = "fj",
["fin"] = "fi",
["fra"] = "fr",
["fry"] = "fy",
["ful"] = "ff",
["gla"] = "gd",
["gle"] = "ga",
["glg"] = "gl",
["glv"] = "gv",
["grn"] = "gn",
["guj"] = "gu",
["hat"] = "ht",
["hau"] = "ha",
["heb"] = "he",
["her"] = "hz",
["hin"] = "hi",
["hmo"] = "ho",
["hrv"] = "hr",
["hun"] = "hu",
["hye"] = "hy",
["ibo"] = "ig",
["ido"] = "io",
["iii"] = "ii",
["iku"] = "iu",
["ile"] = "ie",
["ina"] = "ia",
["ind"] = "id",
["ipk"] = "ik",
["isl"] = "is",
["ita"] = "it",
["jav"] = "jv",
["jpn"] = "ja",
["kal"] = "kl",
["kan"] = "kn",
["kas"] = "ks",
["kat"] = "ka",
["kau"] = "kr",
["kaz"] = "kk",
["khm"] = "km",
["kik"] = "ki",
["kin"] = "rw",
["kir"] = "ky",
["kom"] = "kv",
["kon"] = "kg",
["kor"] = "ko",
["kua"] = "kj",
["kur"] = "ku",
["lao"] = "lo",
["lat"] = "la",
["lav"] = "lv",
["lim"] = "li",
["lin"] = "ln",
["lit"] = "lt",
["ltz"] = "lb",
["lub"] = "lu",
["lug"] = "lg",
["mah"] = "mh",
["mal"] = "ml",
["mar"] = "mr",
["mkd"] = "mk",
["mlg"] = "mg",
["mlt"] = "mt",
["mon"] = "mn",
["mri"] = "mi",
["msa"] = "ms",
["mya"] = "my",
["nau"] = "na",
["nav"] = "nv",
["nbl"] = "nr",
["nde"] = "nd",
["ndo"] = "ng",
["nep"] = "ne",
["nld"] = "nl",
["nno"] = "nn",
["nob"] = "nb",
["nor"] = "no",
["nya"] = "ny",
["oci"] = "oc",
["oji"] = "oj",
["ori"] = "or",
["orm"] = "om",
["oss"] = "os",
["pan"] = "pa",
["pli"] = "pi",
["pol"] = "pl",
["por"] = "pt",
["pus"] = "ps",
["que"] = "qu",
["roh"] = "rm",
["ron"] = "ro",
["run"] = "rn",
["rus"] = "ru",
["sag"] = "sg",
["san"] = "sa",
["sin"] = "si",
["slk"] = "sk",
["slv"] = "sl",
["sme"] = "se",
["smo"] = "sm",
["sna"] = "sn",
["snd"] = "sd",
["som"] = "so",
["sot"] = "st",
["spa"] = "es",
["sqi"] = "sq",
["srd"] = "sc",
["srp"] = "sr",
["ssw"] = "ss",
["sun"] = "su",
["swa"] = "sw",
["swe"] = "sv",
["tah"] = "ty",
["tam"] = "ta",
["tat"] = "tt",
["tel"] = "te",
["tgk"] = "tg",
["tgl"] = "tl",
["tha"] = "th",
["tir"] = "ti",
["ton"] = "to",
["tsn"] = "tn",
["tso"] = "ts",
["tuk"] = "tk",
["tur"] = "tr",
["twi"] = "tw",
["uig"] = "ug",
["ukr"] = "uk",
["urd"] = "ur",
["uzb"] = "uz",
["ven"] = "ve",
["vie"] = "vi",
["vol"] = "vo",
["wln"] = "wa",
["wol"] = "wo",
["xho"] = "xh",
["yid"] = "yi",
["yor"] = "yo",
["zha"] = "za",
["zho"] = "zh",
["zul"] = "zu"
}
f3fb5374c9e0fdef6ce6ea22736b79468358ca19
Template:Mbox
10
246
717
716
2023-06-06T18:16:32Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Mbox]]: w
wikitext
text/x-wiki
{{#invoke:Message box|mbox}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
5bfb2becf8bed35974b47e3ff8660dc14bee40c7
Template:Lang
10
247
719
718
2023-06-06T18:16:37Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Lang]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Lang|{{{fn|lang}}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
ed35aafbfe8198c5ad80fd861124244d0c7f2742
Module:Exponential search
828
248
721
720
2023-06-06T18:16:38Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Exponential_search]]: w
Scribunto
text/plain
-- This module provides a generic exponential search algorithm.
require[[strict]]
local checkType = require('libraryUtil').checkType
local floor = math.floor
local function midPoint(lower, upper)
return floor(lower + (upper - lower) / 2)
end
local function search(testFunc, i, lower, upper)
if testFunc(i) then
if i + 1 == upper then
return i
end
lower = i
if upper then
i = midPoint(lower, upper)
else
i = i * 2
end
return search(testFunc, i, lower, upper)
else
upper = i
i = midPoint(lower, upper)
return search(testFunc, i, lower, upper)
end
end
return function (testFunc, init)
checkType('Exponential search', 1, testFunc, 'function')
checkType('Exponential search', 2, init, 'number', true)
if init and (init < 1 or init ~= floor(init) or init == math.huge) then
error(string.format(
"invalid init value '%s' detected in argument #2 to " ..
"'Exponential search' (init value must be a positive integer)",
tostring(init)
), 2)
end
init = init or 2
if not testFunc(1) then
return nil
end
return search(testFunc, init, 1, nil)
end
a9037be0c44536be79b2d7a26155bfb907368ae7
Module:Unicode data/scripts
828
249
723
722
2023-06-06T18:16:42Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Unicode_data/scripts]]: w
Scribunto
text/plain
--[=[
-- Official Unicode script values for individual codepoints and ranges of
-- codepoints.
-- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided
-- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt
-- provided script codes corresponding to the names (see [[Script (Unicode)]]).
--]=]
local data = {
singles = {
[0x000AA] = "Latn",
[0x000BA] = "Latn",
[0x000D7] = "Zyyy",
[0x000F7] = "Zyyy",
[0x00374] = "Zyyy",
[0x0037E] = "Zyyy",
[0x0037F] = "Grek",
[0x00384] = "Grek",
[0x00385] = "Zyyy",
[0x00386] = "Grek",
[0x00387] = "Zyyy",
[0x0038C] = "Grek",
[0x00605] = "Zyyy",
[0x0060C] = "Zyyy",
[0x0061B] = "Zyyy",
[0x0061F] = "Zyyy",
[0x00640] = "Zyyy",
[0x00670] = "Zinh",
[0x006DD] = "Zyyy",
[0x0085E] = "Mand",
[0x008E2] = "Zyyy",
[0x009B2] = "Beng",
[0x009D7] = "Beng",
[0x00A3C] = "Guru",
[0x00A51] = "Guru",
[0x00A5E] = "Guru",
[0x00AD0] = "Gujr",
[0x00B9C] = "Taml",
[0x00BD0] = "Taml",
[0x00BD7] = "Taml",
[0x00C5D] = "Telu",
[0x00DBD] = "Sinh",
[0x00DCA] = "Sinh",
[0x00DD6] = "Sinh",
[0x00E3F] = "Zyyy",
[0x00E84] = "Laoo",
[0x00EA5] = "Laoo",
[0x00EC6] = "Laoo",
[0x010C7] = "Geor",
[0x010CD] = "Geor",
[0x010FB] = "Zyyy",
[0x01258] = "Ethi",
[0x012C0] = "Ethi",
[0x0171F] = "Tglg",
[0x01804] = "Mong",
[0x01805] = "Zyyy",
[0x01940] = "Limb",
[0x01CD3] = "Zyyy",
[0x01CE1] = "Zyyy",
[0x01CED] = "Zinh",
[0x01CF4] = "Zinh",
[0x01CFA] = "Zyyy",
[0x01D2B] = "Cyrl",
[0x01D78] = "Cyrl",
[0x01DBF] = "Grek",
[0x01F59] = "Grek",
[0x01F5B] = "Grek",
[0x01F5D] = "Grek",
[0x02071] = "Latn",
[0x0207F] = "Latn",
[0x02126] = "Grek",
[0x02132] = "Latn",
[0x0214E] = "Latn",
[0x02D27] = "Geor",
[0x02D2D] = "Geor",
[0x02D7F] = "Tfng",
[0x03005] = "Hani",
[0x03006] = "Zyyy",
[0x03007] = "Hani",
[0x030A0] = "Zyyy",
[0x032FF] = "Zyyy",
[0x0A7D3] = "Latn",
[0x0A92E] = "Zyyy",
[0x0A92F] = "Kali",
[0x0A95F] = "Rjng",
[0x0A9CF] = "Zyyy",
[0x0AB5B] = "Zyyy",
[0x0AB65] = "Grek",
[0x0FB3E] = "Hebr",
[0x0FDCF] = "Arab",
[0x0FEFF] = "Zyyy",
[0x0FF70] = "Zyyy",
[0x101A0] = "Grek",
[0x101FD] = "Zinh",
[0x102E0] = "Zinh",
[0x1039F] = "Ugar",
[0x1056F] = "Aghb",
[0x10808] = "Cprt",
[0x1083C] = "Cprt",
[0x1083F] = "Cprt",
[0x1091F] = "Phnx",
[0x1093F] = "Lydi",
[0x1107F] = "Brah",
[0x110CD] = "Kthi",
[0x11288] = "Mult",
[0x1133B] = "Zinh",
[0x11350] = "Gran",
[0x11357] = "Gran",
[0x118FF] = "Wara",
[0x11909] = "Diak",
[0x11D3A] = "Gonm",
[0x11FB0] = "Lisu",
[0x11FFF] = "Taml",
[0x16FE0] = "Tang",
[0x16FE1] = "Nshu",
[0x16FE4] = "Kits",
[0x1B000] = "Kana",
[0x1B132] = "Hira",
[0x1B155] = "Kana",
[0x1D4A2] = "Zyyy",
[0x1D4BB] = "Zyyy",
[0x1D546] = "Zyyy",
[0x1E08F] = "Cyrl",
[0x1E2FF] = "Wcho",
[0x1EE24] = "Arab",
[0x1EE27] = "Arab",
[0x1EE39] = "Arab",
[0x1EE3B] = "Arab",
[0x1EE42] = "Arab",
[0x1EE47] = "Arab",
[0x1EE49] = "Arab",
[0x1EE4B] = "Arab",
[0x1EE54] = "Arab",
[0x1EE57] = "Arab",
[0x1EE59] = "Arab",
[0x1EE5B] = "Arab",
[0x1EE5D] = "Arab",
[0x1EE5F] = "Arab",
[0x1EE64] = "Arab",
[0x1EE7E] = "Arab",
[0x1F200] = "Hira",
[0x1F7F0] = "Zyyy",
[0xE0001] = "Zyyy",
},
ranges = {
{ 0x00000, 0x00040, "Zyyy" },
{ 0x00041, 0x0005A, "Latn" },
{ 0x0005B, 0x00060, "Zyyy" },
{ 0x00061, 0x0007A, "Latn" },
{ 0x0007B, 0x000A9, "Zyyy" },
{ 0x000AB, 0x000B9, "Zyyy" },
{ 0x000BB, 0x000BF, "Zyyy" },
{ 0x000C0, 0x000D6, "Latn" },
{ 0x000D8, 0x000F6, "Latn" },
{ 0x000F8, 0x002B8, "Latn" },
{ 0x002B9, 0x002DF, "Zyyy" },
{ 0x002E0, 0x002E4, "Latn" },
{ 0x002E5, 0x002E9, "Zyyy" },
{ 0x002EA, 0x002EB, "Bopo" },
{ 0x002EC, 0x002FF, "Zyyy" },
{ 0x00300, 0x0036F, "Zinh" },
{ 0x00370, 0x00373, "Grek" },
{ 0x00375, 0x00377, "Grek" },
{ 0x0037A, 0x0037D, "Grek" },
{ 0x00388, 0x0038A, "Grek" },
{ 0x0038E, 0x003A1, "Grek" },
{ 0x003A3, 0x003E1, "Grek" },
{ 0x003E2, 0x003EF, "Copt" },
{ 0x003F0, 0x003FF, "Grek" },
{ 0x00400, 0x00484, "Cyrl" },
{ 0x00485, 0x00486, "Zinh" },
{ 0x00487, 0x0052F, "Cyrl" },
{ 0x00531, 0x00556, "Armn" },
{ 0x00559, 0x0058A, "Armn" },
{ 0x0058D, 0x0058F, "Armn" },
{ 0x00591, 0x005C7, "Hebr" },
{ 0x005D0, 0x005EA, "Hebr" },
{ 0x005EF, 0x005F4, "Hebr" },
{ 0x00600, 0x00604, "Arab" },
{ 0x00606, 0x0060B, "Arab" },
{ 0x0060D, 0x0061A, "Arab" },
{ 0x0061C, 0x0061E, "Arab" },
{ 0x00620, 0x0063F, "Arab" },
{ 0x00641, 0x0064A, "Arab" },
{ 0x0064B, 0x00655, "Zinh" },
{ 0x00656, 0x0066F, "Arab" },
{ 0x00671, 0x006DC, "Arab" },
{ 0x006DE, 0x006FF, "Arab" },
{ 0x00700, 0x0070D, "Syrc" },
{ 0x0070F, 0x0074A, "Syrc" },
{ 0x0074D, 0x0074F, "Syrc" },
{ 0x00750, 0x0077F, "Arab" },
{ 0x00780, 0x007B1, "Thaa" },
{ 0x007C0, 0x007FA, "Nkoo" },
{ 0x007FD, 0x007FF, "Nkoo" },
{ 0x00800, 0x0082D, "Samr" },
{ 0x00830, 0x0083E, "Samr" },
{ 0x00840, 0x0085B, "Mand" },
{ 0x00860, 0x0086A, "Syrc" },
{ 0x00870, 0x0088E, "Arab" },
{ 0x00890, 0x00891, "Arab" },
{ 0x00898, 0x008E1, "Arab" },
{ 0x008E3, 0x008FF, "Arab" },
{ 0x00900, 0x00950, "Deva" },
{ 0x00951, 0x00954, "Zinh" },
{ 0x00955, 0x00963, "Deva" },
{ 0x00964, 0x00965, "Zyyy" },
{ 0x00966, 0x0097F, "Deva" },
{ 0x00980, 0x00983, "Beng" },
{ 0x00985, 0x0098C, "Beng" },
{ 0x0098F, 0x00990, "Beng" },
{ 0x00993, 0x009A8, "Beng" },
{ 0x009AA, 0x009B0, "Beng" },
{ 0x009B6, 0x009B9, "Beng" },
{ 0x009BC, 0x009C4, "Beng" },
{ 0x009C7, 0x009C8, "Beng" },
{ 0x009CB, 0x009CE, "Beng" },
{ 0x009DC, 0x009DD, "Beng" },
{ 0x009DF, 0x009E3, "Beng" },
{ 0x009E6, 0x009FE, "Beng" },
{ 0x00A01, 0x00A03, "Guru" },
{ 0x00A05, 0x00A0A, "Guru" },
{ 0x00A0F, 0x00A10, "Guru" },
{ 0x00A13, 0x00A28, "Guru" },
{ 0x00A2A, 0x00A30, "Guru" },
{ 0x00A32, 0x00A33, "Guru" },
{ 0x00A35, 0x00A36, "Guru" },
{ 0x00A38, 0x00A39, "Guru" },
{ 0x00A3E, 0x00A42, "Guru" },
{ 0x00A47, 0x00A48, "Guru" },
{ 0x00A4B, 0x00A4D, "Guru" },
{ 0x00A59, 0x00A5C, "Guru" },
{ 0x00A66, 0x00A76, "Guru" },
{ 0x00A81, 0x00A83, "Gujr" },
{ 0x00A85, 0x00A8D, "Gujr" },
{ 0x00A8F, 0x00A91, "Gujr" },
{ 0x00A93, 0x00AA8, "Gujr" },
{ 0x00AAA, 0x00AB0, "Gujr" },
{ 0x00AB2, 0x00AB3, "Gujr" },
{ 0x00AB5, 0x00AB9, "Gujr" },
{ 0x00ABC, 0x00AC5, "Gujr" },
{ 0x00AC7, 0x00AC9, "Gujr" },
{ 0x00ACB, 0x00ACD, "Gujr" },
{ 0x00AE0, 0x00AE3, "Gujr" },
{ 0x00AE6, 0x00AF1, "Gujr" },
{ 0x00AF9, 0x00AFF, "Gujr" },
{ 0x00B01, 0x00B03, "Orya" },
{ 0x00B05, 0x00B0C, "Orya" },
{ 0x00B0F, 0x00B10, "Orya" },
{ 0x00B13, 0x00B28, "Orya" },
{ 0x00B2A, 0x00B30, "Orya" },
{ 0x00B32, 0x00B33, "Orya" },
{ 0x00B35, 0x00B39, "Orya" },
{ 0x00B3C, 0x00B44, "Orya" },
{ 0x00B47, 0x00B48, "Orya" },
{ 0x00B4B, 0x00B4D, "Orya" },
{ 0x00B55, 0x00B57, "Orya" },
{ 0x00B5C, 0x00B5D, "Orya" },
{ 0x00B5F, 0x00B63, "Orya" },
{ 0x00B66, 0x00B77, "Orya" },
{ 0x00B82, 0x00B83, "Taml" },
{ 0x00B85, 0x00B8A, "Taml" },
{ 0x00B8E, 0x00B90, "Taml" },
{ 0x00B92, 0x00B95, "Taml" },
{ 0x00B99, 0x00B9A, "Taml" },
{ 0x00B9E, 0x00B9F, "Taml" },
{ 0x00BA3, 0x00BA4, "Taml" },
{ 0x00BA8, 0x00BAA, "Taml" },
{ 0x00BAE, 0x00BB9, "Taml" },
{ 0x00BBE, 0x00BC2, "Taml" },
{ 0x00BC6, 0x00BC8, "Taml" },
{ 0x00BCA, 0x00BCD, "Taml" },
{ 0x00BE6, 0x00BFA, "Taml" },
{ 0x00C00, 0x00C0C, "Telu" },
{ 0x00C0E, 0x00C10, "Telu" },
{ 0x00C12, 0x00C28, "Telu" },
{ 0x00C2A, 0x00C39, "Telu" },
{ 0x00C3C, 0x00C44, "Telu" },
{ 0x00C46, 0x00C48, "Telu" },
{ 0x00C4A, 0x00C4D, "Telu" },
{ 0x00C55, 0x00C56, "Telu" },
{ 0x00C58, 0x00C5A, "Telu" },
{ 0x00C60, 0x00C63, "Telu" },
{ 0x00C66, 0x00C6F, "Telu" },
{ 0x00C77, 0x00C7F, "Telu" },
{ 0x00C80, 0x00C8C, "Knda" },
{ 0x00C8E, 0x00C90, "Knda" },
{ 0x00C92, 0x00CA8, "Knda" },
{ 0x00CAA, 0x00CB3, "Knda" },
{ 0x00CB5, 0x00CB9, "Knda" },
{ 0x00CBC, 0x00CC4, "Knda" },
{ 0x00CC6, 0x00CC8, "Knda" },
{ 0x00CCA, 0x00CCD, "Knda" },
{ 0x00CD5, 0x00CD6, "Knda" },
{ 0x00CDD, 0x00CDE, "Knda" },
{ 0x00CE0, 0x00CE3, "Knda" },
{ 0x00CE6, 0x00CEF, "Knda" },
{ 0x00CF1, 0x00CF3, "Knda" },
{ 0x00D00, 0x00D0C, "Mlym" },
{ 0x00D0E, 0x00D10, "Mlym" },
{ 0x00D12, 0x00D44, "Mlym" },
{ 0x00D46, 0x00D48, "Mlym" },
{ 0x00D4A, 0x00D4F, "Mlym" },
{ 0x00D54, 0x00D63, "Mlym" },
{ 0x00D66, 0x00D7F, "Mlym" },
{ 0x00D81, 0x00D83, "Sinh" },
{ 0x00D85, 0x00D96, "Sinh" },
{ 0x00D9A, 0x00DB1, "Sinh" },
{ 0x00DB3, 0x00DBB, "Sinh" },
{ 0x00DC0, 0x00DC6, "Sinh" },
{ 0x00DCF, 0x00DD4, "Sinh" },
{ 0x00DD8, 0x00DDF, "Sinh" },
{ 0x00DE6, 0x00DEF, "Sinh" },
{ 0x00DF2, 0x00DF4, "Sinh" },
{ 0x00E01, 0x00E3A, "Thai" },
{ 0x00E40, 0x00E5B, "Thai" },
{ 0x00E81, 0x00E82, "Laoo" },
{ 0x00E86, 0x00E8A, "Laoo" },
{ 0x00E8C, 0x00EA3, "Laoo" },
{ 0x00EA7, 0x00EBD, "Laoo" },
{ 0x00EC0, 0x00EC4, "Laoo" },
{ 0x00EC8, 0x00ECE, "Laoo" },
{ 0x00ED0, 0x00ED9, "Laoo" },
{ 0x00EDC, 0x00EDF, "Laoo" },
{ 0x00F00, 0x00F47, "Tibt" },
{ 0x00F49, 0x00F6C, "Tibt" },
{ 0x00F71, 0x00F97, "Tibt" },
{ 0x00F99, 0x00FBC, "Tibt" },
{ 0x00FBE, 0x00FCC, "Tibt" },
{ 0x00FCE, 0x00FD4, "Tibt" },
{ 0x00FD5, 0x00FD8, "Zyyy" },
{ 0x00FD9, 0x00FDA, "Tibt" },
{ 0x01000, 0x0109F, "Mymr" },
{ 0x010A0, 0x010C5, "Geor" },
{ 0x010D0, 0x010FA, "Geor" },
{ 0x010FC, 0x010FF, "Geor" },
{ 0x01100, 0x011FF, "Hang" },
{ 0x01200, 0x01248, "Ethi" },
{ 0x0124A, 0x0124D, "Ethi" },
{ 0x01250, 0x01256, "Ethi" },
{ 0x0125A, 0x0125D, "Ethi" },
{ 0x01260, 0x01288, "Ethi" },
{ 0x0128A, 0x0128D, "Ethi" },
{ 0x01290, 0x012B0, "Ethi" },
{ 0x012B2, 0x012B5, "Ethi" },
{ 0x012B8, 0x012BE, "Ethi" },
{ 0x012C2, 0x012C5, "Ethi" },
{ 0x012C8, 0x012D6, "Ethi" },
{ 0x012D8, 0x01310, "Ethi" },
{ 0x01312, 0x01315, "Ethi" },
{ 0x01318, 0x0135A, "Ethi" },
{ 0x0135D, 0x0137C, "Ethi" },
{ 0x01380, 0x01399, "Ethi" },
{ 0x013A0, 0x013F5, "Cher" },
{ 0x013F8, 0x013FD, "Cher" },
{ 0x01400, 0x0167F, "Cans" },
{ 0x01680, 0x0169C, "Ogam" },
{ 0x016A0, 0x016EA, "Runr" },
{ 0x016EB, 0x016ED, "Zyyy" },
{ 0x016EE, 0x016F8, "Runr" },
{ 0x01700, 0x01715, "Tglg" },
{ 0x01720, 0x01734, "Hano" },
{ 0x01735, 0x01736, "Zyyy" },
{ 0x01740, 0x01753, "Buhd" },
{ 0x01760, 0x0176C, "Tagb" },
{ 0x0176E, 0x01770, "Tagb" },
{ 0x01772, 0x01773, "Tagb" },
{ 0x01780, 0x017DD, "Khmr" },
{ 0x017E0, 0x017E9, "Khmr" },
{ 0x017F0, 0x017F9, "Khmr" },
{ 0x01800, 0x01801, "Mong" },
{ 0x01802, 0x01803, "Zyyy" },
{ 0x01806, 0x01819, "Mong" },
{ 0x01820, 0x01878, "Mong" },
{ 0x01880, 0x018AA, "Mong" },
{ 0x018B0, 0x018F5, "Cans" },
{ 0x01900, 0x0191E, "Limb" },
{ 0x01920, 0x0192B, "Limb" },
{ 0x01930, 0x0193B, "Limb" },
{ 0x01944, 0x0194F, "Limb" },
{ 0x01950, 0x0196D, "Tale" },
{ 0x01970, 0x01974, "Tale" },
{ 0x01980, 0x019AB, "Talu" },
{ 0x019B0, 0x019C9, "Talu" },
{ 0x019D0, 0x019DA, "Talu" },
{ 0x019DE, 0x019DF, "Talu" },
{ 0x019E0, 0x019FF, "Khmr" },
{ 0x01A00, 0x01A1B, "Bugi" },
{ 0x01A1E, 0x01A1F, "Bugi" },
{ 0x01A20, 0x01A5E, "Lana" },
{ 0x01A60, 0x01A7C, "Lana" },
{ 0x01A7F, 0x01A89, "Lana" },
{ 0x01A90, 0x01A99, "Lana" },
{ 0x01AA0, 0x01AAD, "Lana" },
{ 0x01AB0, 0x01ACE, "Zinh" },
{ 0x01B00, 0x01B4C, "Bali" },
{ 0x01B50, 0x01B7E, "Bali" },
{ 0x01B80, 0x01BBF, "Sund" },
{ 0x01BC0, 0x01BF3, "Batk" },
{ 0x01BFC, 0x01BFF, "Batk" },
{ 0x01C00, 0x01C37, "Lepc" },
{ 0x01C3B, 0x01C49, "Lepc" },
{ 0x01C4D, 0x01C4F, "Lepc" },
{ 0x01C50, 0x01C7F, "Olck" },
{ 0x01C80, 0x01C88, "Cyrl" },
{ 0x01C90, 0x01CBA, "Geor" },
{ 0x01CBD, 0x01CBF, "Geor" },
{ 0x01CC0, 0x01CC7, "Sund" },
{ 0x01CD0, 0x01CD2, "Zinh" },
{ 0x01CD4, 0x01CE0, "Zinh" },
{ 0x01CE2, 0x01CE8, "Zinh" },
{ 0x01CE9, 0x01CEC, "Zyyy" },
{ 0x01CEE, 0x01CF3, "Zyyy" },
{ 0x01CF5, 0x01CF7, "Zyyy" },
{ 0x01CF8, 0x01CF9, "Zinh" },
{ 0x01D00, 0x01D25, "Latn" },
{ 0x01D26, 0x01D2A, "Grek" },
{ 0x01D2C, 0x01D5C, "Latn" },
{ 0x01D5D, 0x01D61, "Grek" },
{ 0x01D62, 0x01D65, "Latn" },
{ 0x01D66, 0x01D6A, "Grek" },
{ 0x01D6B, 0x01D77, "Latn" },
{ 0x01D79, 0x01DBE, "Latn" },
{ 0x01DC0, 0x01DFF, "Zinh" },
{ 0x01E00, 0x01EFF, "Latn" },
{ 0x01F00, 0x01F15, "Grek" },
{ 0x01F18, 0x01F1D, "Grek" },
{ 0x01F20, 0x01F45, "Grek" },
{ 0x01F48, 0x01F4D, "Grek" },
{ 0x01F50, 0x01F57, "Grek" },
{ 0x01F5F, 0x01F7D, "Grek" },
{ 0x01F80, 0x01FB4, "Grek" },
{ 0x01FB6, 0x01FC4, "Grek" },
{ 0x01FC6, 0x01FD3, "Grek" },
{ 0x01FD6, 0x01FDB, "Grek" },
{ 0x01FDD, 0x01FEF, "Grek" },
{ 0x01FF2, 0x01FF4, "Grek" },
{ 0x01FF6, 0x01FFE, "Grek" },
{ 0x02000, 0x0200B, "Zyyy" },
{ 0x0200C, 0x0200D, "Zinh" },
{ 0x0200E, 0x02064, "Zyyy" },
{ 0x02066, 0x02070, "Zyyy" },
{ 0x02074, 0x0207E, "Zyyy" },
{ 0x02080, 0x0208E, "Zyyy" },
{ 0x02090, 0x0209C, "Latn" },
{ 0x020A0, 0x020C0, "Zyyy" },
{ 0x020D0, 0x020F0, "Zinh" },
{ 0x02100, 0x02125, "Zyyy" },
{ 0x02127, 0x02129, "Zyyy" },
{ 0x0212A, 0x0212B, "Latn" },
{ 0x0212C, 0x02131, "Zyyy" },
{ 0x02133, 0x0214D, "Zyyy" },
{ 0x0214F, 0x0215F, "Zyyy" },
{ 0x02160, 0x02188, "Latn" },
{ 0x02189, 0x0218B, "Zyyy" },
{ 0x02190, 0x02426, "Zyyy" },
{ 0x02440, 0x0244A, "Zyyy" },
{ 0x02460, 0x027FF, "Zyyy" },
{ 0x02800, 0x028FF, "Brai" },
{ 0x02900, 0x02B73, "Zyyy" },
{ 0x02B76, 0x02B95, "Zyyy" },
{ 0x02B97, 0x02BFF, "Zyyy" },
{ 0x02C00, 0x02C5F, "Glag" },
{ 0x02C60, 0x02C7F, "Latn" },
{ 0x02C80, 0x02CF3, "Copt" },
{ 0x02CF9, 0x02CFF, "Copt" },
{ 0x02D00, 0x02D25, "Geor" },
{ 0x02D30, 0x02D67, "Tfng" },
{ 0x02D6F, 0x02D70, "Tfng" },
{ 0x02D80, 0x02D96, "Ethi" },
{ 0x02DA0, 0x02DA6, "Ethi" },
{ 0x02DA8, 0x02DAE, "Ethi" },
{ 0x02DB0, 0x02DB6, "Ethi" },
{ 0x02DB8, 0x02DBE, "Ethi" },
{ 0x02DC0, 0x02DC6, "Ethi" },
{ 0x02DC8, 0x02DCE, "Ethi" },
{ 0x02DD0, 0x02DD6, "Ethi" },
{ 0x02DD8, 0x02DDE, "Ethi" },
{ 0x02DE0, 0x02DFF, "Cyrl" },
{ 0x02E00, 0x02E5D, "Zyyy" },
{ 0x02E80, 0x02E99, "Hani" },
{ 0x02E9B, 0x02EF3, "Hani" },
{ 0x02F00, 0x02FD5, "Hani" },
{ 0x02FF0, 0x02FFB, "Zyyy" },
{ 0x03000, 0x03004, "Zyyy" },
{ 0x03008, 0x03020, "Zyyy" },
{ 0x03021, 0x03029, "Hani" },
{ 0x0302A, 0x0302D, "Zinh" },
{ 0x0302E, 0x0302F, "Hang" },
{ 0x03030, 0x03037, "Zyyy" },
{ 0x03038, 0x0303B, "Hani" },
{ 0x0303C, 0x0303F, "Zyyy" },
{ 0x03041, 0x03096, "Hira" },
{ 0x03099, 0x0309A, "Zinh" },
{ 0x0309B, 0x0309C, "Zyyy" },
{ 0x0309D, 0x0309F, "Hira" },
{ 0x030A1, 0x030FA, "Kana" },
{ 0x030FB, 0x030FC, "Zyyy" },
{ 0x030FD, 0x030FF, "Kana" },
{ 0x03105, 0x0312F, "Bopo" },
{ 0x03131, 0x0318E, "Hang" },
{ 0x03190, 0x0319F, "Zyyy" },
{ 0x031A0, 0x031BF, "Bopo" },
{ 0x031C0, 0x031E3, "Zyyy" },
{ 0x031F0, 0x031FF, "Kana" },
{ 0x03200, 0x0321E, "Hang" },
{ 0x03220, 0x0325F, "Zyyy" },
{ 0x03260, 0x0327E, "Hang" },
{ 0x0327F, 0x032CF, "Zyyy" },
{ 0x032D0, 0x032FE, "Kana" },
{ 0x03300, 0x03357, "Kana" },
{ 0x03358, 0x033FF, "Zyyy" },
{ 0x03400, 0x04DBF, "Hani" },
{ 0x04DC0, 0x04DFF, "Zyyy" },
{ 0x04E00, 0x09FFF, "Hani" },
{ 0x0A000, 0x0A48C, "Yiii" },
{ 0x0A490, 0x0A4C6, "Yiii" },
{ 0x0A4D0, 0x0A4FF, "Lisu" },
{ 0x0A500, 0x0A62B, "Vaii" },
{ 0x0A640, 0x0A69F, "Cyrl" },
{ 0x0A6A0, 0x0A6F7, "Bamu" },
{ 0x0A700, 0x0A721, "Zyyy" },
{ 0x0A722, 0x0A787, "Latn" },
{ 0x0A788, 0x0A78A, "Zyyy" },
{ 0x0A78B, 0x0A7CA, "Latn" },
{ 0x0A7D0, 0x0A7D1, "Latn" },
{ 0x0A7D5, 0x0A7D9, "Latn" },
{ 0x0A7F2, 0x0A7FF, "Latn" },
{ 0x0A800, 0x0A82C, "Sylo" },
{ 0x0A830, 0x0A839, "Zyyy" },
{ 0x0A840, 0x0A877, "Phag" },
{ 0x0A880, 0x0A8C5, "Saur" },
{ 0x0A8CE, 0x0A8D9, "Saur" },
{ 0x0A8E0, 0x0A8FF, "Deva" },
{ 0x0A900, 0x0A92D, "Kali" },
{ 0x0A930, 0x0A953, "Rjng" },
{ 0x0A960, 0x0A97C, "Hang" },
{ 0x0A980, 0x0A9CD, "Java" },
{ 0x0A9D0, 0x0A9D9, "Java" },
{ 0x0A9DE, 0x0A9DF, "Java" },
{ 0x0A9E0, 0x0A9FE, "Mymr" },
{ 0x0AA00, 0x0AA36, "Cham" },
{ 0x0AA40, 0x0AA4D, "Cham" },
{ 0x0AA50, 0x0AA59, "Cham" },
{ 0x0AA5C, 0x0AA5F, "Cham" },
{ 0x0AA60, 0x0AA7F, "Mymr" },
{ 0x0AA80, 0x0AAC2, "Tavt" },
{ 0x0AADB, 0x0AADF, "Tavt" },
{ 0x0AAE0, 0x0AAF6, "Mtei" },
{ 0x0AB01, 0x0AB06, "Ethi" },
{ 0x0AB09, 0x0AB0E, "Ethi" },
{ 0x0AB11, 0x0AB16, "Ethi" },
{ 0x0AB20, 0x0AB26, "Ethi" },
{ 0x0AB28, 0x0AB2E, "Ethi" },
{ 0x0AB30, 0x0AB5A, "Latn" },
{ 0x0AB5C, 0x0AB64, "Latn" },
{ 0x0AB66, 0x0AB69, "Latn" },
{ 0x0AB6A, 0x0AB6B, "Zyyy" },
{ 0x0AB70, 0x0ABBF, "Cher" },
{ 0x0ABC0, 0x0ABED, "Mtei" },
{ 0x0ABF0, 0x0ABF9, "Mtei" },
{ 0x0AC00, 0x0D7A3, "Hang" },
{ 0x0D7B0, 0x0D7C6, "Hang" },
{ 0x0D7CB, 0x0D7FB, "Hang" },
{ 0x0F900, 0x0FA6D, "Hani" },
{ 0x0FA70, 0x0FAD9, "Hani" },
{ 0x0FB00, 0x0FB06, "Latn" },
{ 0x0FB13, 0x0FB17, "Armn" },
{ 0x0FB1D, 0x0FB36, "Hebr" },
{ 0x0FB38, 0x0FB3C, "Hebr" },
{ 0x0FB40, 0x0FB41, "Hebr" },
{ 0x0FB43, 0x0FB44, "Hebr" },
{ 0x0FB46, 0x0FB4F, "Hebr" },
{ 0x0FB50, 0x0FBC2, "Arab" },
{ 0x0FBD3, 0x0FD3D, "Arab" },
{ 0x0FD3E, 0x0FD3F, "Zyyy" },
{ 0x0FD40, 0x0FD8F, "Arab" },
{ 0x0FD92, 0x0FDC7, "Arab" },
{ 0x0FDF0, 0x0FDFF, "Arab" },
{ 0x0FE00, 0x0FE0F, "Zinh" },
{ 0x0FE10, 0x0FE19, "Zyyy" },
{ 0x0FE20, 0x0FE2D, "Zinh" },
{ 0x0FE2E, 0x0FE2F, "Cyrl" },
{ 0x0FE30, 0x0FE52, "Zyyy" },
{ 0x0FE54, 0x0FE66, "Zyyy" },
{ 0x0FE68, 0x0FE6B, "Zyyy" },
{ 0x0FE70, 0x0FE74, "Arab" },
{ 0x0FE76, 0x0FEFC, "Arab" },
{ 0x0FF01, 0x0FF20, "Zyyy" },
{ 0x0FF21, 0x0FF3A, "Latn" },
{ 0x0FF3B, 0x0FF40, "Zyyy" },
{ 0x0FF41, 0x0FF5A, "Latn" },
{ 0x0FF5B, 0x0FF65, "Zyyy" },
{ 0x0FF66, 0x0FF6F, "Kana" },
{ 0x0FF71, 0x0FF9D, "Kana" },
{ 0x0FF9E, 0x0FF9F, "Zyyy" },
{ 0x0FFA0, 0x0FFBE, "Hang" },
{ 0x0FFC2, 0x0FFC7, "Hang" },
{ 0x0FFCA, 0x0FFCF, "Hang" },
{ 0x0FFD2, 0x0FFD7, "Hang" },
{ 0x0FFDA, 0x0FFDC, "Hang" },
{ 0x0FFE0, 0x0FFE6, "Zyyy" },
{ 0x0FFE8, 0x0FFEE, "Zyyy" },
{ 0x0FFF9, 0x0FFFD, "Zyyy" },
{ 0x10000, 0x1000B, "Linb" },
{ 0x1000D, 0x10026, "Linb" },
{ 0x10028, 0x1003A, "Linb" },
{ 0x1003C, 0x1003D, "Linb" },
{ 0x1003F, 0x1004D, "Linb" },
{ 0x10050, 0x1005D, "Linb" },
{ 0x10080, 0x100FA, "Linb" },
{ 0x10100, 0x10102, "Zyyy" },
{ 0x10107, 0x10133, "Zyyy" },
{ 0x10137, 0x1013F, "Zyyy" },
{ 0x10140, 0x1018E, "Grek" },
{ 0x10190, 0x1019C, "Zyyy" },
{ 0x101D0, 0x101FC, "Zyyy" },
{ 0x10280, 0x1029C, "Lyci" },
{ 0x102A0, 0x102D0, "Cari" },
{ 0x102E1, 0x102FB, "Zyyy" },
{ 0x10300, 0x10323, "Ital" },
{ 0x1032D, 0x1032F, "Ital" },
{ 0x10330, 0x1034A, "Goth" },
{ 0x10350, 0x1037A, "Perm" },
{ 0x10380, 0x1039D, "Ugar" },
{ 0x103A0, 0x103C3, "Xpeo" },
{ 0x103C8, 0x103D5, "Xpeo" },
{ 0x10400, 0x1044F, "Dsrt" },
{ 0x10450, 0x1047F, "Shaw" },
{ 0x10480, 0x1049D, "Osma" },
{ 0x104A0, 0x104A9, "Osma" },
{ 0x104B0, 0x104D3, "Osge" },
{ 0x104D8, 0x104FB, "Osge" },
{ 0x10500, 0x10527, "Elba" },
{ 0x10530, 0x10563, "Aghb" },
{ 0x10570, 0x1057A, "Vith" },
{ 0x1057C, 0x1058A, "Vith" },
{ 0x1058C, 0x10592, "Vith" },
{ 0x10594, 0x10595, "Vith" },
{ 0x10597, 0x105A1, "Vith" },
{ 0x105A3, 0x105B1, "Vith" },
{ 0x105B3, 0x105B9, "Vith" },
{ 0x105BB, 0x105BC, "Vith" },
{ 0x10600, 0x10736, "Lina" },
{ 0x10740, 0x10755, "Lina" },
{ 0x10760, 0x10767, "Lina" },
{ 0x10780, 0x10785, "Latn" },
{ 0x10787, 0x107B0, "Latn" },
{ 0x107B2, 0x107BA, "Latn" },
{ 0x10800, 0x10805, "Cprt" },
{ 0x1080A, 0x10835, "Cprt" },
{ 0x10837, 0x10838, "Cprt" },
{ 0x10840, 0x10855, "Armi" },
{ 0x10857, 0x1085F, "Armi" },
{ 0x10860, 0x1087F, "Palm" },
{ 0x10880, 0x1089E, "Nbat" },
{ 0x108A7, 0x108AF, "Nbat" },
{ 0x108E0, 0x108F2, "Hatr" },
{ 0x108F4, 0x108F5, "Hatr" },
{ 0x108FB, 0x108FF, "Hatr" },
{ 0x10900, 0x1091B, "Phnx" },
{ 0x10920, 0x10939, "Lydi" },
{ 0x10980, 0x1099F, "Mero" },
{ 0x109A0, 0x109B7, "Merc" },
{ 0x109BC, 0x109CF, "Merc" },
{ 0x109D2, 0x109FF, "Merc" },
{ 0x10A00, 0x10A03, "Khar" },
{ 0x10A05, 0x10A06, "Khar" },
{ 0x10A0C, 0x10A13, "Khar" },
{ 0x10A15, 0x10A17, "Khar" },
{ 0x10A19, 0x10A35, "Khar" },
{ 0x10A38, 0x10A3A, "Khar" },
{ 0x10A3F, 0x10A48, "Khar" },
{ 0x10A50, 0x10A58, "Khar" },
{ 0x10A60, 0x10A7F, "Sarb" },
{ 0x10A80, 0x10A9F, "Narb" },
{ 0x10AC0, 0x10AE6, "Mani" },
{ 0x10AEB, 0x10AF6, "Mani" },
{ 0x10B00, 0x10B35, "Avst" },
{ 0x10B39, 0x10B3F, "Avst" },
{ 0x10B40, 0x10B55, "Prti" },
{ 0x10B58, 0x10B5F, "Prti" },
{ 0x10B60, 0x10B72, "Phli" },
{ 0x10B78, 0x10B7F, "Phli" },
{ 0x10B80, 0x10B91, "Phlp" },
{ 0x10B99, 0x10B9C, "Phlp" },
{ 0x10BA9, 0x10BAF, "Phlp" },
{ 0x10C00, 0x10C48, "Orkh" },
{ 0x10C80, 0x10CB2, "Hung" },
{ 0x10CC0, 0x10CF2, "Hung" },
{ 0x10CFA, 0x10CFF, "Hung" },
{ 0x10D00, 0x10D27, "Rohg" },
{ 0x10D30, 0x10D39, "Rohg" },
{ 0x10E60, 0x10E7E, "Arab" },
{ 0x10E80, 0x10EA9, "Yezi" },
{ 0x10EAB, 0x10EAD, "Yezi" },
{ 0x10EB0, 0x10EB1, "Yezi" },
{ 0x10EFD, 0x10EFF, "Arab" },
{ 0x10F00, 0x10F27, "Sogo" },
{ 0x10F30, 0x10F59, "Sogd" },
{ 0x10F70, 0x10F89, "Ougr" },
{ 0x10FB0, 0x10FCB, "Chrs" },
{ 0x10FE0, 0x10FF6, "Elym" },
{ 0x11000, 0x1104D, "Brah" },
{ 0x11052, 0x11075, "Brah" },
{ 0x11080, 0x110C2, "Kthi" },
{ 0x110D0, 0x110E8, "Sora" },
{ 0x110F0, 0x110F9, "Sora" },
{ 0x11100, 0x11134, "Cakm" },
{ 0x11136, 0x11147, "Cakm" },
{ 0x11150, 0x11176, "Mahj" },
{ 0x11180, 0x111DF, "Shrd" },
{ 0x111E1, 0x111F4, "Sinh" },
{ 0x11200, 0x11211, "Khoj" },
{ 0x11213, 0x11241, "Khoj" },
{ 0x11280, 0x11286, "Mult" },
{ 0x1128A, 0x1128D, "Mult" },
{ 0x1128F, 0x1129D, "Mult" },
{ 0x1129F, 0x112A9, "Mult" },
{ 0x112B0, 0x112EA, "Sind" },
{ 0x112F0, 0x112F9, "Sind" },
{ 0x11300, 0x11303, "Gran" },
{ 0x11305, 0x1130C, "Gran" },
{ 0x1130F, 0x11310, "Gran" },
{ 0x11313, 0x11328, "Gran" },
{ 0x1132A, 0x11330, "Gran" },
{ 0x11332, 0x11333, "Gran" },
{ 0x11335, 0x11339, "Gran" },
{ 0x1133C, 0x11344, "Gran" },
{ 0x11347, 0x11348, "Gran" },
{ 0x1134B, 0x1134D, "Gran" },
{ 0x1135D, 0x11363, "Gran" },
{ 0x11366, 0x1136C, "Gran" },
{ 0x11370, 0x11374, "Gran" },
{ 0x11400, 0x1145B, "Newa" },
{ 0x1145D, 0x11461, "Newa" },
{ 0x11480, 0x114C7, "Tirh" },
{ 0x114D0, 0x114D9, "Tirh" },
{ 0x11580, 0x115B5, "Sidd" },
{ 0x115B8, 0x115DD, "Sidd" },
{ 0x11600, 0x11644, "Modi" },
{ 0x11650, 0x11659, "Modi" },
{ 0x11660, 0x1166C, "Mong" },
{ 0x11680, 0x116B9, "Takr" },
{ 0x116C0, 0x116C9, "Takr" },
{ 0x11700, 0x1171A, "Ahom" },
{ 0x1171D, 0x1172B, "Ahom" },
{ 0x11730, 0x11746, "Ahom" },
{ 0x11800, 0x1183B, "Dogr" },
{ 0x118A0, 0x118F2, "Wara" },
{ 0x11900, 0x11906, "Diak" },
{ 0x1190C, 0x11913, "Diak" },
{ 0x11915, 0x11916, "Diak" },
{ 0x11918, 0x11935, "Diak" },
{ 0x11937, 0x11938, "Diak" },
{ 0x1193B, 0x11946, "Diak" },
{ 0x11950, 0x11959, "Diak" },
{ 0x119A0, 0x119A7, "Nand" },
{ 0x119AA, 0x119D7, "Nand" },
{ 0x119DA, 0x119E4, "Nand" },
{ 0x11A00, 0x11A47, "Zanb" },
{ 0x11A50, 0x11AA2, "Soyo" },
{ 0x11AB0, 0x11ABF, "Cans" },
{ 0x11AC0, 0x11AF8, "Pauc" },
{ 0x11B00, 0x11B09, "Deva" },
{ 0x11C00, 0x11C08, "Bhks" },
{ 0x11C0A, 0x11C36, "Bhks" },
{ 0x11C38, 0x11C45, "Bhks" },
{ 0x11C50, 0x11C6C, "Bhks" },
{ 0x11C70, 0x11C8F, "Marc" },
{ 0x11C92, 0x11CA7, "Marc" },
{ 0x11CA9, 0x11CB6, "Marc" },
{ 0x11D00, 0x11D06, "Gonm" },
{ 0x11D08, 0x11D09, "Gonm" },
{ 0x11D0B, 0x11D36, "Gonm" },
{ 0x11D3C, 0x11D3D, "Gonm" },
{ 0x11D3F, 0x11D47, "Gonm" },
{ 0x11D50, 0x11D59, "Gonm" },
{ 0x11D60, 0x11D65, "Gong" },
{ 0x11D67, 0x11D68, "Gong" },
{ 0x11D6A, 0x11D8E, "Gong" },
{ 0x11D90, 0x11D91, "Gong" },
{ 0x11D93, 0x11D98, "Gong" },
{ 0x11DA0, 0x11DA9, "Gong" },
{ 0x11EE0, 0x11EF8, "Maka" },
{ 0x11F00, 0x11F10, "Kawi" },
{ 0x11F12, 0x11F3A, "Kawi" },
{ 0x11F3E, 0x11F59, "Kawi" },
{ 0x11FC0, 0x11FF1, "Taml" },
{ 0x12000, 0x12399, "Xsux" },
{ 0x12400, 0x1246E, "Xsux" },
{ 0x12470, 0x12474, "Xsux" },
{ 0x12480, 0x12543, "Xsux" },
{ 0x12F90, 0x12FF2, "Cpmn" },
{ 0x13000, 0x13455, "Egyp" },
{ 0x14400, 0x14646, "Hluw" },
{ 0x16800, 0x16A38, "Bamu" },
{ 0x16A40, 0x16A5E, "Mroo" },
{ 0x16A60, 0x16A69, "Mroo" },
{ 0x16A6E, 0x16A6F, "Mroo" },
{ 0x16A70, 0x16ABE, "Tnsa" },
{ 0x16AC0, 0x16AC9, "Tnsa" },
{ 0x16AD0, 0x16AED, "Bass" },
{ 0x16AF0, 0x16AF5, "Bass" },
{ 0x16B00, 0x16B45, "Hmng" },
{ 0x16B50, 0x16B59, "Hmng" },
{ 0x16B5B, 0x16B61, "Hmng" },
{ 0x16B63, 0x16B77, "Hmng" },
{ 0x16B7D, 0x16B8F, "Hmng" },
{ 0x16E40, 0x16E9A, "Medf" },
{ 0x16F00, 0x16F4A, "Plrd" },
{ 0x16F4F, 0x16F87, "Plrd" },
{ 0x16F8F, 0x16F9F, "Plrd" },
{ 0x16FE2, 0x16FE3, "Hani" },
{ 0x16FF0, 0x16FF1, "Hani" },
{ 0x17000, 0x187F7, "Tang" },
{ 0x18800, 0x18AFF, "Tang" },
{ 0x18B00, 0x18CD5, "Kits" },
{ 0x18D00, 0x18D08, "Tang" },
{ 0x1AFF0, 0x1AFF3, "Kana" },
{ 0x1AFF5, 0x1AFFB, "Kana" },
{ 0x1AFFD, 0x1AFFE, "Kana" },
{ 0x1B001, 0x1B11F, "Hira" },
{ 0x1B120, 0x1B122, "Kana" },
{ 0x1B150, 0x1B152, "Hira" },
{ 0x1B164, 0x1B167, "Kana" },
{ 0x1B170, 0x1B2FB, "Nshu" },
{ 0x1BC00, 0x1BC6A, "Dupl" },
{ 0x1BC70, 0x1BC7C, "Dupl" },
{ 0x1BC80, 0x1BC88, "Dupl" },
{ 0x1BC90, 0x1BC99, "Dupl" },
{ 0x1BC9C, 0x1BC9F, "Dupl" },
{ 0x1BCA0, 0x1BCA3, "Zyyy" },
{ 0x1CF00, 0x1CF2D, "Zinh" },
{ 0x1CF30, 0x1CF46, "Zinh" },
{ 0x1CF50, 0x1CFC3, "Zyyy" },
{ 0x1D000, 0x1D0F5, "Zyyy" },
{ 0x1D100, 0x1D126, "Zyyy" },
{ 0x1D129, 0x1D166, "Zyyy" },
{ 0x1D167, 0x1D169, "Zinh" },
{ 0x1D16A, 0x1D17A, "Zyyy" },
{ 0x1D17B, 0x1D182, "Zinh" },
{ 0x1D183, 0x1D184, "Zyyy" },
{ 0x1D185, 0x1D18B, "Zinh" },
{ 0x1D18C, 0x1D1A9, "Zyyy" },
{ 0x1D1AA, 0x1D1AD, "Zinh" },
{ 0x1D1AE, 0x1D1EA, "Zyyy" },
{ 0x1D200, 0x1D245, "Grek" },
{ 0x1D2C0, 0x1D2D3, "Zyyy" },
{ 0x1D2E0, 0x1D2F3, "Zyyy" },
{ 0x1D300, 0x1D356, "Zyyy" },
{ 0x1D360, 0x1D378, "Zyyy" },
{ 0x1D400, 0x1D454, "Zyyy" },
{ 0x1D456, 0x1D49C, "Zyyy" },
{ 0x1D49E, 0x1D49F, "Zyyy" },
{ 0x1D4A5, 0x1D4A6, "Zyyy" },
{ 0x1D4A9, 0x1D4AC, "Zyyy" },
{ 0x1D4AE, 0x1D4B9, "Zyyy" },
{ 0x1D4BD, 0x1D4C3, "Zyyy" },
{ 0x1D4C5, 0x1D505, "Zyyy" },
{ 0x1D507, 0x1D50A, "Zyyy" },
{ 0x1D50D, 0x1D514, "Zyyy" },
{ 0x1D516, 0x1D51C, "Zyyy" },
{ 0x1D51E, 0x1D539, "Zyyy" },
{ 0x1D53B, 0x1D53E, "Zyyy" },
{ 0x1D540, 0x1D544, "Zyyy" },
{ 0x1D54A, 0x1D550, "Zyyy" },
{ 0x1D552, 0x1D6A5, "Zyyy" },
{ 0x1D6A8, 0x1D7CB, "Zyyy" },
{ 0x1D7CE, 0x1D7FF, "Zyyy" },
{ 0x1D800, 0x1DA8B, "Sgnw" },
{ 0x1DA9B, 0x1DA9F, "Sgnw" },
{ 0x1DAA1, 0x1DAAF, "Sgnw" },
{ 0x1DF00, 0x1DF1E, "Latn" },
{ 0x1DF25, 0x1DF2A, "Latn" },
{ 0x1E000, 0x1E006, "Glag" },
{ 0x1E008, 0x1E018, "Glag" },
{ 0x1E01B, 0x1E021, "Glag" },
{ 0x1E023, 0x1E024, "Glag" },
{ 0x1E026, 0x1E02A, "Glag" },
{ 0x1E030, 0x1E06D, "Cyrl" },
{ 0x1E100, 0x1E12C, "Hmnp" },
{ 0x1E130, 0x1E13D, "Hmnp" },
{ 0x1E140, 0x1E149, "Hmnp" },
{ 0x1E14E, 0x1E14F, "Hmnp" },
{ 0x1E290, 0x1E2AE, "Toto" },
{ 0x1E2C0, 0x1E2F9, "Wcho" },
{ 0x1E4D0, 0x1E4F9, "Nagm" },
{ 0x1E7E0, 0x1E7E6, "Ethi" },
{ 0x1E7E8, 0x1E7EB, "Ethi" },
{ 0x1E7ED, 0x1E7EE, "Ethi" },
{ 0x1E7F0, 0x1E7FE, "Ethi" },
{ 0x1E800, 0x1E8C4, "Mend" },
{ 0x1E8C7, 0x1E8D6, "Mend" },
{ 0x1E900, 0x1E94B, "Adlm" },
{ 0x1E950, 0x1E959, "Adlm" },
{ 0x1E95E, 0x1E95F, "Adlm" },
{ 0x1EC71, 0x1ECB4, "Zyyy" },
{ 0x1ED01, 0x1ED3D, "Zyyy" },
{ 0x1EE00, 0x1EE03, "Arab" },
{ 0x1EE05, 0x1EE1F, "Arab" },
{ 0x1EE21, 0x1EE22, "Arab" },
{ 0x1EE29, 0x1EE32, "Arab" },
{ 0x1EE34, 0x1EE37, "Arab" },
{ 0x1EE4D, 0x1EE4F, "Arab" },
{ 0x1EE51, 0x1EE52, "Arab" },
{ 0x1EE61, 0x1EE62, "Arab" },
{ 0x1EE67, 0x1EE6A, "Arab" },
{ 0x1EE6C, 0x1EE72, "Arab" },
{ 0x1EE74, 0x1EE77, "Arab" },
{ 0x1EE79, 0x1EE7C, "Arab" },
{ 0x1EE80, 0x1EE89, "Arab" },
{ 0x1EE8B, 0x1EE9B, "Arab" },
{ 0x1EEA1, 0x1EEA3, "Arab" },
{ 0x1EEA5, 0x1EEA9, "Arab" },
{ 0x1EEAB, 0x1EEBB, "Arab" },
{ 0x1EEF0, 0x1EEF1, "Arab" },
{ 0x1F000, 0x1F02B, "Zyyy" },
{ 0x1F030, 0x1F093, "Zyyy" },
{ 0x1F0A0, 0x1F0AE, "Zyyy" },
{ 0x1F0B1, 0x1F0BF, "Zyyy" },
{ 0x1F0C1, 0x1F0CF, "Zyyy" },
{ 0x1F0D1, 0x1F0F5, "Zyyy" },
{ 0x1F100, 0x1F1AD, "Zyyy" },
{ 0x1F1E6, 0x1F1FF, "Zyyy" },
{ 0x1F201, 0x1F202, "Zyyy" },
{ 0x1F210, 0x1F23B, "Zyyy" },
{ 0x1F240, 0x1F248, "Zyyy" },
{ 0x1F250, 0x1F251, "Zyyy" },
{ 0x1F260, 0x1F265, "Zyyy" },
{ 0x1F300, 0x1F6D7, "Zyyy" },
{ 0x1F6DC, 0x1F6EC, "Zyyy" },
{ 0x1F6F0, 0x1F6FC, "Zyyy" },
{ 0x1F700, 0x1F776, "Zyyy" },
{ 0x1F77B, 0x1F7D9, "Zyyy" },
{ 0x1F7E0, 0x1F7EB, "Zyyy" },
{ 0x1F800, 0x1F80B, "Zyyy" },
{ 0x1F810, 0x1F847, "Zyyy" },
{ 0x1F850, 0x1F859, "Zyyy" },
{ 0x1F860, 0x1F887, "Zyyy" },
{ 0x1F890, 0x1F8AD, "Zyyy" },
{ 0x1F8B0, 0x1F8B1, "Zyyy" },
{ 0x1F900, 0x1FA53, "Zyyy" },
{ 0x1FA60, 0x1FA6D, "Zyyy" },
{ 0x1FA70, 0x1FA7C, "Zyyy" },
{ 0x1FA80, 0x1FA88, "Zyyy" },
{ 0x1FA90, 0x1FABD, "Zyyy" },
{ 0x1FABF, 0x1FAC5, "Zyyy" },
{ 0x1FACE, 0x1FADB, "Zyyy" },
{ 0x1FAE0, 0x1FAE8, "Zyyy" },
{ 0x1FAF0, 0x1FAF8, "Zyyy" },
{ 0x1FB00, 0x1FB92, "Zyyy" },
{ 0x1FB94, 0x1FBCA, "Zyyy" },
{ 0x1FBF0, 0x1FBF9, "Zyyy" },
{ 0x20000, 0x2A6DF, "Hani" },
{ 0x2A700, 0x2B739, "Hani" },
{ 0x2B740, 0x2B81D, "Hani" },
{ 0x2B820, 0x2CEA1, "Hani" },
{ 0x2CEB0, 0x2EBE0, "Hani" },
{ 0x2F800, 0x2FA1D, "Hani" },
{ 0x30000, 0x3134A, "Hani" },
{ 0x31350, 0x323AF, "Hani" },
{ 0xE0020, 0xE007F, "Zyyy" },
{ 0xE0100, 0xE01EF, "Zinh" },
},
-- Scripts.txt gives full names; here we consider them aliases to save space.
aliases = {
Adlm = "Adlam",
Aghb = "Caucasian Albanian",
Ahom = "Ahom",
Arab = "Arabic",
Armi = "Imperial Aramaic",
Armn = "Armenian",
Avst = "Avestan",
Bali = "Balinese",
Bamu = "Bamum",
Bass = "Bassa Vah",
Batk = "Batak",
Beng = "Bengali",
Bhks = "Bhaiksuki",
Bopo = "Bopomofo",
Brah = "Brahmi",
Brai = "Braille",
Bugi = "Buginese",
Buhd = "Buhid",
Cakm = "Chakma",
Cans = "Canadian Aboriginal",
Cari = "Carian",
Cham = "Cham",
Cher = "Cherokee",
Chrs = "Chorasmian",
Copt = "Coptic",
Cpmn = "Cypro Minoan",
Cprt = "Cypriot",
Cyrl = "Cyrillic",
Deva = "Devanagari",
Diak = "Dives Akuru",
Dogr = "Dogra",
Dsrt = "Deseret",
Dupl = "Duployan",
Egyp = "Egyptian Hieroglyphs",
Elba = "Elbasan",
Elym = "Elymaic",
Ethi = "Ethiopic",
Geor = "Georgian",
Glag = "Glagolitic",
Gong = "Gunjala Gondi",
Gonm = "Masaram Gondi",
Goth = "Gothic",
Gran = "Grantha",
Grek = "Greek",
Gujr = "Gujarati",
Guru = "Gurmukhi",
Hang = "Hangul",
Hani = "Han",
Hano = "Hanunoo",
Hatr = "Hatran",
Hebr = "Hebrew",
Hira = "Hiragana",
Hluw = "Anatolian Hieroglyphs",
Hmng = "Pahawh Hmong",
Hmnp = "Nyiakeng Puachue Hmong",
Hrkt = "Katakana Or Hiragana",
Hung = "Old Hungarian",
Ital = "Old Italic",
Java = "Javanese",
Kali = "Kayah Li",
Kana = "Katakana",
Kawi = "Kawi",
Khar = "Kharoshthi",
Khmr = "Khmer",
Khoj = "Khojki",
Kits = "Khitan Small Script",
Knda = "Kannada",
Kthi = "Kaithi",
Lana = "Tai Tham",
Laoo = "Lao",
Latn = "Latin",
Lepc = "Lepcha",
Limb = "Limbu",
Lina = "Linear A",
Linb = "Linear B",
Lisu = "Lisu",
Lyci = "Lycian",
Lydi = "Lydian",
Mahj = "Mahajani",
Maka = "Makasar",
Mand = "Mandaic",
Mani = "Manichaean",
Marc = "Marchen",
Medf = "Medefaidrin",
Mend = "Mende Kikakui",
Merc = "Meroitic Cursive",
Mero = "Meroitic Hieroglyphs",
Mlym = "Malayalam",
Modi = "Modi",
Mong = "Mongolian",
Mroo = "Mro",
Mtei = "Meetei Mayek",
Mult = "Multani",
Mymr = "Myanmar",
Nagm = "Nag Mundari",
Nand = "Nandinagari",
Narb = "Old North Arabian",
Nbat = "Nabataean",
Newa = "Newa",
Nkoo = "NKo",
Nshu = "Nushu",
Ogam = "Ogham",
Olck = "Ol Chiki",
Orkh = "Old Turkic",
Orya = "Oriya",
Osge = "Osage",
Osma = "Osmanya",
Ougr = "Old Uyghur",
Palm = "Palmyrene",
Pauc = "Pau Cin Hau",
Perm = "Old Permic",
Phag = "Phags Pa",
Phli = "Inscriptional Pahlavi",
Phlp = "Psalter Pahlavi",
Phnx = "Phoenician",
Plrd = "Miao",
Prti = "Inscriptional Parthian",
Rjng = "Rejang",
Rohg = "Hanifi Rohingya",
Runr = "Runic",
Samr = "Samaritan",
Sarb = "Old South Arabian",
Saur = "Saurashtra",
Sgnw = "SignWriting",
Shaw = "Shavian",
Shrd = "Sharada",
Sidd = "Siddham",
Sind = "Khudawadi",
Sinh = "Sinhala",
Sogd = "Sogdian",
Sogo = "Old Sogdian",
Sora = "Sora Sompeng",
Soyo = "Soyombo",
Sund = "Sundanese",
Sylo = "Syloti Nagri",
Syrc = "Syriac",
Tagb = "Tagbanwa",
Takr = "Takri",
Tale = "Tai Le",
Talu = "New Tai Lue",
Taml = "Tamil",
Tang = "Tangut",
Tavt = "Tai Viet",
Telu = "Telugu",
Tfng = "Tifinagh",
Tglg = "Tagalog",
Thaa = "Thaana",
Thai = "Thai",
Tibt = "Tibetan",
Tirh = "Tirhuta",
Tnsa = "Tangsa",
Toto = "Toto",
Ugar = "Ugaritic",
Vaii = "Vai",
Vith = "Vithkuqi",
Wara = "Warang Citi",
Wcho = "Wancho",
Xpeo = "Old Persian",
Xsux = "Cuneiform",
Yezi = "Yezidi",
Yiii = "Yi",
Zanb = "Zanabazar Square",
Zinh = "Inherited",
Zyyy = "Common",
Zzzz = "Unknown",
},
}
-- Required for binary search function in [[Module:Language/scripts]].
-- Cannot get length of module loaded with mw.loadData.
data.ranges.length = #data.ranges
data.rtl = {}
for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do
-- [[Module:Lang/data]] has script codes in lowercase;
-- this module has script codes with the first letter capitalized.
data.rtl[script:gsub("^%a", string.upper)] = true
end
return data
f887eb9f8d53e83c36af36a127f534c3e063e358
Template:Details
10
250
725
724
2023-06-06T18:16:43Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Details]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Further]]
{{Redirect category shell|
{{R from merge}}
}}
1a90a51d85f6cb700979ea38f5f69bee0ff2c85e
Template:TOC right
10
251
727
726
2023-06-06T18:16:44Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:TOC_right]]: w
wikitext
text/x-wiki
<templatestyles src="Template:TOC_right/styles.css" />{{#if:{{{limit|}}}|<templatestyles src="Template:TOC limit/styles.css" />}}<!--
--><div class="tocright {{#if:{{{clear|}}}|tocright-clear-{{{clear|}}}}} {{#if:{{{limit|}}}|toclimit-{{{limit}}}}}" {{#if:{{{width|{{{1|}}}}}}|style="width: {{{width|{{{1}}}}}};"}}>__TOC__</div><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
67c60b46e441afa40d8c4c1227aa6580a0cda2e9
Template:TOC right/styles.css
10
252
729
728
2023-06-06T18:16:46Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:TOC_right/styles.css]]: w
sanitized-css
text/css
/* {{pp-template}} */
/* The TOC is hidden on Minerva (mobile skin) for width < 720px so must also hide this wrapper */
@media all and (max-width: 720px) {
body.skin-minerva .tocright {
display: none;
}
.tocright {
width: 100% !important; /* fix the inline width while at small resolution */
}
}
@media all and (min-width: 720px) {
.tocright {
float: right;
clear: right;
width: auto;
margin: 0 0 0.5em 1em;
}
.tocright-clear-left {
clear: left;
}
.tocright-clear-both {
clear: both;
}
.tocright-clear-none {
clear: none;
}
}
60435a52ddabf7eb321fa80dbf78c0d63d13f95b
Template:Category link
10
253
731
730
2023-06-06T18:16:47Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Category_link]]: w
wikitext
text/x-wiki
{{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Stub types for deletion |[[:Category:{{{1}}}|Cat:{{{1}}}]] | [[:Category:{{{1}}}|{{{2|Category:{{{1}}}}}}]]{{#ifeq:{{Yesno|{{{count|no}}}}}|yes|<small> {{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|<span style="font-weight: bold; color: #DD0000;">}}( {{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}}} ){{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|</span>}}</small>}}}}<noinclude>
{{Documentation}}
</noinclude>
cb0fcaeb8242d1d37c27a8dcb57f76fe5b5faa36
Template:Cl
10
254
733
732
2023-06-06T18:16:47Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Cl]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Category link]]
{{R from move}}
f79fddc38797fc163b6e6ddeb4377afbea7d0cfc
Module:Nihongo
828
255
735
734
2023-06-06T18:16:49Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Module:Nihongo]]: w
Scribunto
text/plain
require('strict');
--[[--------------------------< E R R O R _ M E S S A G E S >--------------------------------------------------
error messaging; keys to this table are the template base names:
'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc
]]
local err_msg = {
['nihongo'] = 'Japanese or romaji text required',
['hanyu'] = 'Chinese or pinyin text required',
}
local err_cat = {
['nihongo'] = '[[Category:Nihongo template errors]]',
['hanyu'] = '[[Category:Hanyu template errors]]',
}
--[[--------------------------< C O N F I G U R A T I O N >----------------------------------------------------
configuration setting for the various templates. keys to this table are the template names without spacing
]]
local cfg = {
['nihongo'] = {
tag = 'ja',
system = 'hepburn',
system_link = '[[Hepburn romanization|Hepburn]]',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo3'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo krt'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo foot'] = {
tag = 'ja',
system = 'hepburn',
system_link = '[[Hepburn romanization|Hepburn]]',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['hanyu'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu3'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu hrt'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu foot'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
}
--[[--------------------------< E R R O R _ M E S S A G E >----------------------------------------------------
Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese>
or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors
]]
local function error_message (template)
local msg = {'<span class="error" style="font-size:100%">error: {{'};
table.insert (msg, template);
table.insert (msg, '}}: ');
table.insert (msg, cfg[template].err_msg);
table.insert (msg, ' ([[Template:');
table.insert (msg, template);
table.insert (msg, '|help]])</span>');
if 0 == mw.title.getCurrentTitle().namespace then
table.insert (msg, cfg[template].err_cat);
end
return table.concat (msg);
end
--[[--------------------------< R E N D E R E R >--------------------------------------------------------------
Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{}
from set/unset parameters:
args[1] (english text) has a value of 8 (set) or 0 (unset)
args[2] (native text) has a value of 4
args[3] (romanized text) has a value of 2
args[4] (extra) has a value of 1
index, the sum of these values, gets the appropriate format string from formatting{} table with associated values
from the formatting[index][2] table
]]
local function renderer (args, formatting, extra2)
local output;
local index = 0; -- index into formatting{}
local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1)
for i=1, 5 do -- spin through args[1] – args[4]
index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{}
end
output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil;
if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{}
output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced
end -- (nihongo and nihongo3) or removed (nihongo foot)
return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close
end
--[[--------------------------< R O M A N I Z E D _ K E R N >--------------------------------------------------
Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis
In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses
(<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>)
<ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced)
<romanized> is the return from lang_module._transl() so is not wrapped in parentheses
]]
local function romanized_kern (ret_string, romanized)
if not romanized or ('' == romanized) then -- if romanized not set
return ret_string; -- then we're done
end
local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags
romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters
local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else
local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else
local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis
local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis
local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture
local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture
if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then
ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned
end
if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then
ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned
end
return ret_string; -- done
end
--[[--------------------------< C O M M O N >------------------------------------------------------------------
Common support for {{nihongo}} and {{hanyu}}
render order: is translated (English), native, romanized
<template> is used to select the appropriate cfg table
]]
local function common (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized)
{'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized)
{'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >----------
Common support for {{nihongo3}} and {{hanyu3}}
render order: is romanized, native, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_romanized_native_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english)
{'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >----------
Common support for {{nihongo krt}} and {{hanyu krt}}
render order: is native, romanized, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_native_romanized_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>%s', {native}}, -- 4 - native
{'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra)
{'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized)
{'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english)
{'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra)
{'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english)
{'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ F O O T >--------------------------------------------------------
Common support for {{nihongo foot}} and {{hanyu foot}}
render order: is English<ref>native, romanized</ref>
<template> is used to select the appropriate cfg table
]]
local function common_foot (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local post = args[6] or args.post;
local group = args.group;
local ref_name = args.ref_name
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = {
{'%s', {extra}}, -- 1 - extra
{'%s', {romanized}}, -- 2 - romanized
{'%s, %s', {romanized, extra}}, -- 3 - romanized, extra
{'%s', {native}}, -- 4 - native
{'%s, %s', {native, extra}}, -- 5 - native, extra
{'%s, %s', {native, romanized}}, -- 6 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra
-- from here english is used in the mapping but not rendered by renderer so not included in the table
{'', {''}}, -- 8 - english
{'%s', {extra}}, -- 9 - extra
{'%s', {romanized}}, -- 10 - romanized
{'%s, %s', {romanized, extra}}, -- 11 - romanized, extra
{'%s', {native}}, -- 12 - native
{'%s, %s', {native, extra}}, -- 13 - native, extra
{'%s, %s', {native, romanized}}, -- 14 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra
}
if english and post then -- rewrite english to include |post=
english = english .. post; -- if english has a value append post else just post
elseif post then
english = post; -- english not set, use post
elseif not english then -- neither are set
english = ''; -- make english an empty string for concatenation
end
if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty)
local content = renderer (args, formatting, extra2);
content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template
return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag
else
return english; -- nothing to be inside ref tag so just return english
end
end
--[=[-------------------------< N I H O N G O >----------------------------------------------------------------
Implement {{nihongo}} using Module:Lang for language and transliteration markup
{{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function nihongo (frame)
return common (frame, 'nihongo')
end
--[=[-------------------------< N I H O N G O 3 >--------------------------------------------------------------
Implement {{nihongo3}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo3 (frame)
return common_romanized_native_translated (frame, 'nihongo3')
end
--[=[-------------------------< N I H O N G O _ K R T >--------------------------------------------------------
Implement {{nihongo krt}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo_krt (frame)
return common_native_romanized_translated (frame, 'nihongo krt')
end
--[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------
Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup
{{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function nihongo_foot (frame)
return common_foot (frame, 'nihongo foot')
end
--[=[-------------------------< H A N Y U >--------------------------------------------------------------------
Implement {{hanyu}} using Module:Lang for language and transliteration markup
{{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function hanyu (frame)
return common (frame, 'hanyu')
end
--[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------
Implement {{hanyu3}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu3 (frame)
return common_romanized_native_translated (frame, 'hanyu3')
end
--[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------
Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu_hrt (frame)
return common_native_romanized_translated (frame, 'hanyu hrt')
end
--[=[-------------------------< H A N Y U _ F O O T >----------------------------------------------------------
Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup
{{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function hanyu_foot (frame)
return common_foot (frame, 'hanyu foot')
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
nihongo = nihongo,
nihongo3 = nihongo3,
nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line
nihongo_krt = nihongo_krt,
nihongo_foot = nihongo_foot,
hanyu = hanyu,
hanyu3 = hanyu3,
hanyu_hrt = hanyu_hrt,
hanyu_foot = hanyu_foot,
}
7ad11952c5404f68ef3dc04de743da59f35238c9
Template:Notice
10
256
737
736
2023-06-06T18:16:50Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Notice]]: w
wikitext
text/x-wiki
{{Mbox
| name = Notice
| demospace = {{{demospace|}}}
| style = {{#if:{{{style|}}} |{{{style}}} }}
| subst = <includeonly>{{subst:substcheck}}</includeonly>
| type = notice
| image = {{#if:{{{image|}}} |[[File:{{{image}}}|40px|Notice|alt={{{imagealt|}}}]]}}
| small = {{{small|}}}
| smallimage = {{#if:{{{image|}}} |[[File:{{{image}}}|30px|Notice|alt={{{imagealt|}}}]]}}
| imageright = {{#if:{{{imageright|}}} |{{{imageright}}} |{{#if:{{{shortcut|{{{shortcut1|}}}}}} |{{Ombox/shortcut|{{{shortcut|{{{shortcut1|}}}}}}|{{{shortcut2|}}}|{{{shortcut3|}}}|{{{shortcut4|}}}|{{{shortcut5|}}}}}}} }}
| textstyle = {{{textstyle|text-align: {{#if:{{{center|}}}|center|{{{align|left}}}}};}}}
| text = {{#if:{{{header|{{{heading|{{{title|}}}}}}}}} |<div style="{{{headstyle|text-align: {{#if:{{{center|}}}|center|left}};}}}">'''{{{header|{{{heading|{{{title|}}}}}}}}}'''</div>}}<!--
-->{{{text|{{{content|{{{reason|{{{1}}}}}}}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
2cbdbb721ca517005f6827650eef5b0f17537a43
Template:Lit
10
257
739
738
2023-06-06T18:16:50Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Lit]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Literal translation]]
38b4e908291ac0a1fa8482ed0f8d5631c6a213e6
Template:Var
10
258
741
740
2023-06-06T18:16:52Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Var]]: w
wikitext
text/x-wiki
<var {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} style="padding-right: 1px;{{{style|}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</var><noinclude>
<!--Categories and interwikis go near the bottom of the /doc page.-->
{{Documentation}}
</noinclude>
0e9e47694c01ca4c7b29566a1cb11a117dfbf2c0
Template:Template link code
10
259
743
742
2023-06-06T18:16:53Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Template_link_code]]: w
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nolink=yes|code=yes|nowrap=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlc}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
044f00ca1bfc10cb967c32e893043ccc6f739764
Template:Tld
10
260
745
744
2023-06-06T18:16:54Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Tld]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
be5d6275ea41d83224503e05901f3405c82141f7
Template:TOCright
10
261
747
746
2023-06-06T18:16:54Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:TOCright]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:TOC right]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
f20e461364ddb55d5f46a9e77871e34208173664
Template:COinS safe
10
262
749
748
2023-06-06T18:16:58Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:COinS_safe]]: w
wikitext
text/x-wiki
{{notice
|image={{#ifeq: {{{1|}}}|n|Stop hand nuvola.svg}}
|{{#ifeq: {{{1|}}}|n
|This template should not be used in citation templates such as [[Help:Citation Style 1|Citation Style 1]] and [[Help:Citation Style 2|Citation Style 2]], because it includes markup that will pollute the [[COinS]] metadata they produce; see [[Wikipedia:COinS]]. {{{addtext|}}}{{Sandbox other||[[Category:Templates not safe for use in citation templates]]}}
|This template is safe for use in citation templates that produce [[COinS]] metadata; see [[Wikipedia:COinS]]. If HTML or other markup is added, then the template must be reevaluated. {{{addtext|}}}
}}
}}<noinclude>
{{Documentation}}
<!-- Please add categories to the /doc subpage, and interwikis at Wikidata (see Wikipedia:Wikidata) -->
</noinclude>
47abee673d74440d28e801111bf6ee765cd998df
Template:Nihongo/doc
10
263
751
750
2023-06-06T18:17:01Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Nihongo/doc]]: w
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). -->
{{High-use}}
{{COinS safe|n}}
{{Lua|Module:Nihongo}}
{{TOCright}}
== Usage ==
This template marks the <code>[[kanji]]</code> segment as being in Japanese kanji and/or kana, which helps user agents (web browsers and so on) to display it correctly.
{{details|topic=when to use this template|Wikipedia:Manual of Style (Japan-related articles)}}
'''Syntax:'''
{|class=wikitable
|Without lead=yes
|With lead=yes
|-
|<code><nowiki>{{Nihongo|</nowiki><{{var|english}}>|<{{var|kanji/kana}}>|<{{var|rōmaji}}>|<{{var|extra}}>|<{{var|extra2}}>}}</code>
|<code><nowiki>{{Nihongo|</nowiki><{{var|english}}>|<{{var|kanji/kana}}>|<{{var|rōmaji}}>|lead=yes|extra=<{{var|extra}}>|extra2=<{{var|extra2}}>}}</code>
|}
'''Parameters:'''
* <{{var|english}}>. Optional. The word as translated into English. Note that this will sometimes be the actual Japanese word due to it being adopted into English.
* <{{var|kanji/kana}}>. Required when <{{var|rōmaji}}> is empty or omitted. The word as written using Japanese script (kanji, kana).
* <{{var|rōmaji}}>. Required when <{{var|kanji/kana}}> is empty. Transliteration of the Japanese word, using Hepburn Romanization.
* lead=yes. Optional. This should be used for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing.
* <{{var|extra}}>. Optional. Can be used to add a gloss (particularly if there is no English form). Can also be expressed as a named parameter, <code>extra=</code>
* <{{var|extra2}}>. Optional. Can also be expressed as a named parameter, <code>extra2=</code>. It is only useful in ";" definitions (extra2 will be displayed without bold, whereas text following the template will get the bold).
=== Examples ===
;Regular use:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}}
|}
;Use in lead:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}}
|}
;Without <code>English</code>:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā}}
|}
;Without <code>English</code>, use in lead:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā|lead=yes}}
|}
;With <code>extra</code> to add a literal translation:
{| CLASS="wikitable"
|'''Code''' ||<code><nowiki>{{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}}</nowiki></code>
|-
|'''Gives'''|| {{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}}
|}
;With <code>extra2</code>:
{| CLASS="wikitable"
|'''Code''' ||
<code><nowiki>; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}}</nowiki></code><BR />
<code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code>
|-
|'''Gives'''||
; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}}
: Mendicant priest of the Fuke sect of Zen Buddhism.
|}
{{hatnote|Note: literal translations and linguistic glosses go in [[MOS:SINGLE|single quotation marks]], not double.}}
;Without <code>extra2</code>:
{| CLASS="wikitable"
|'''Code''' ||
<code><nowiki>; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness'</nowiki></code><BR />
<code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code>
|-
|'''Gives'''||
<!-- -->; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness'
<!-- -->: Mendicant priest of the Fuke sect of Zen Buddhism.
|}
=== User style ===
[[Help:User style|User style]] can be set by adding code similar to
<syntaxhighlight lang="css">
@media screen, tv {
*[lang="ja"] {
color: green;
}
}</syntaxhighlight>
to [[Special:Mypage/common.css|common.css]].
==Error messaging==
This template emits one error message of its own:
:<span class="error" style="font-size:100%">error: <nowiki>{{nihongo}}</nowiki>: Japanese or romaji text required</span>
One of the positional parameters <code><{{var|kanji/kana}}></code> (<code><nowiki>{{{2}}}</nowiki></code>), the 'Japanese' referred to in the error message or <code><{{var|rōmaji}}></code> (<code><nowiki>{{{3}}}</nowiki></code>) is required for proper operation of this template. Articles with these errors are collected in {{clc|Nihongo template errors}}.
This error often occurs because the template is malformed:
:<code><nowiki>{{Nihongo|東京タワー}}</nowiki></code> instead of <code><nowiki>{{Nihongo||東京タワー}}</nowiki></code>; {{lang|ja|東京タワー}} is in <code><nowiki>{{{1}}}</nowiki></code> (<code><{{var|english}}></code>) instead of <code><nowiki>{{{2}}}</nowiki></code> (<code><{{var|kanji/kana}}></code>). To resolve this error, add the missing pipe (<code>|</code>) or consider using {{tlx|lang}} or {{tlx|transl}}
Because this template uses {{tld|lang}} and {{tlx|transl}} which emit their own error messages, see the help text for those at:
:{{cl|Lang and lang-xx template errors}} – for error messages emitted by {{tld|lang}}
:{{cl|Transl template errors}} – for error messages emitted by {{tld|transl}}
==Limitations==
This cannot be used within a Wikilink in an article or in any template or other page that is [[WP:Transclusion|transcluded]] into an article.
== See also ==
* {{tlp|Lang-ja|...}},{{tlp|lang|ja|...}}, similar templates in the [[:Category:Lang-x templates|Lang-x template]] for marking up Japanese text
* {{tl|Nihongo3}}, essentially the same as this template, but gives rōmaji first and English inside the parentheses
* {{tl|Nihongo krt}}, essentially the same as this template, but gives kanji first with rōmaji and English inside the parentheses
* {{tl|Nihongo foot}}, same as this version, but puts everything but the English into a footnote
* {{tl|Nihongo2}}, also displays the kanji properly, but without adding anything in parentheses, without rōmaji and without the extra parameters
* {{tlp|in lang|ja}}, to label sources written in Japanese
* {{tl|Japanese}}, to request expert assistance with Japanese script
== Template data ==
{{TemplateDataHeader}}
<templatedata>
{
"description": "This template is used to display Japanese text, applying the correct code and formatting.",
"params": {
"1": {
"label": "English text",
"type": "string",
"description": "The word as translated into English. Note this will sometimes be the actual Japanese word if it has been adopted into English."
},
"2": {
"label": "Kanji/kana text",
"type": "string",
"required": true,
"description": "The word as written in Japanese (kanji, kana, Roman letters, and possibly other marks)."
},
"3": {
"label": "Romanized (rōmaji) text",
"type": "string",
"description": "Transliteration of the Japanese word, using Hepburn Romanization."
},
"4": {
"label": "Extra text inside parentheses",
"type": "string",
"description": "Adds extra text inside the parentheses. ",
"aliases": [
"extra"
]
},
"5": {
"label": "Extra text outside parentheses",
"type": "string",
"description": "Adds extra text outside the parentheses. It is only useful in \";\" definitions (it will be displayed without bold, whereas text following the template, will be bolded). Literal translations and linguistic glosses must use single quotation marks, not double.",
"aliases": [
"extra2"
]
},
"lead": {
"label": "Lead formatting",
"type": "string",
"description": "If set to yes, changes formatting style for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing.",
"suggestedvalues": [
"yes"
]
}
},
"paramOrder": [
"1",
"2",
"3",
"lead",
"4",
"5"
],
"format": "inline"
}
</templatedata>
<includeonly>{{Sandbox other||
<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Japonic multilingual support templates|{{PAGENAME}}]]
[[Category:WikiProject Japan templates|Nihongo]]
}}</includeonly>
03b074eb3b2d0663c7e41ac1fa436fb26704810f
Module:Nihongo
828
255
752
735
2023-06-06T18:19:28Z
Otonashi Ayana
2
Scribunto
text/plain
require('strict');
--[[--------------------------< E R R O R _ M E S S A G E S >--------------------------------------------------
error messaging; keys to this table are the template base names:
'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc
]]
local err_msg = {
['nihongo'] = 'Japanese or romaji text required',
['hanyu'] = 'Chinese or pinyin text required',
}
local err_cat = {
['nihongo'] = '[[Category:Nihongo template errors]]',
['hanyu'] = '[[Category:Hanyu template errors]]',
}
--[[--------------------------< C O N F I G U R A T I O N >----------------------------------------------------
configuration setting for the various templates. keys to this table are the template names without spacing
]]
local cfg = {
['nihongo'] = {
tag = 'ja',
system = 'hepburn',
system_link = 'Hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo3'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo krt'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo foot'] = {
tag = 'ja',
system = 'hepburn',
system_link = '[[Hepburn romanization|Hepburn]]',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['hanyu'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu3'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu hrt'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu foot'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
}
--[[--------------------------< E R R O R _ M E S S A G E >----------------------------------------------------
Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese>
or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors
]]
local function error_message (template)
local msg = {'<span class="error" style="font-size:100%">error: {{'};
table.insert (msg, template);
table.insert (msg, '}}: ');
table.insert (msg, cfg[template].err_msg);
table.insert (msg, ' ([[Template:');
table.insert (msg, template);
table.insert (msg, '|help]])</span>');
if 0 == mw.title.getCurrentTitle().namespace then
table.insert (msg, cfg[template].err_cat);
end
return table.concat (msg);
end
--[[--------------------------< R E N D E R E R >--------------------------------------------------------------
Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{}
from set/unset parameters:
args[1] (english text) has a value of 8 (set) or 0 (unset)
args[2] (native text) has a value of 4
args[3] (romanized text) has a value of 2
args[4] (extra) has a value of 1
index, the sum of these values, gets the appropriate format string from formatting{} table with associated values
from the formatting[index][2] table
]]
local function renderer (args, formatting, extra2)
local output;
local index = 0; -- index into formatting{}
local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1)
for i=1, 5 do -- spin through args[1] – args[4]
index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{}
end
output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil;
if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{}
output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced
end -- (nihongo and nihongo3) or removed (nihongo foot)
return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close
end
--[[--------------------------< R O M A N I Z E D _ K E R N >--------------------------------------------------
Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis
In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses
(<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>)
<ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced)
<romanized> is the return from lang_module._transl() so is not wrapped in parentheses
]]
local function romanized_kern (ret_string, romanized)
if not romanized or ('' == romanized) then -- if romanized not set
return ret_string; -- then we're done
end
local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags
romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters
local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else
local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else
local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis
local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis
local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture
local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture
if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then
ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned
end
if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then
ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned
end
return ret_string; -- done
end
--[[--------------------------< C O M M O N >------------------------------------------------------------------
Common support for {{nihongo}} and {{hanyu}}
render order: is translated (English), native, romanized
<template> is used to select the appropriate cfg table
]]
local function common (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized)
{'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized)
{'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >----------
Common support for {{nihongo3}} and {{hanyu3}}
render order: is romanized, native, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_romanized_native_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english)
{'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >----------
Common support for {{nihongo krt}} and {{hanyu krt}}
render order: is native, romanized, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_native_romanized_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>%s', {native}}, -- 4 - native
{'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra)
{'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized)
{'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english)
{'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra)
{'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english)
{'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ F O O T >--------------------------------------------------------
Common support for {{nihongo foot}} and {{hanyu foot}}
render order: is English<ref>native, romanized</ref>
<template> is used to select the appropriate cfg table
]]
local function common_foot (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local post = args[6] or args.post;
local group = args.group;
local ref_name = args.ref_name
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = {
{'%s', {extra}}, -- 1 - extra
{'%s', {romanized}}, -- 2 - romanized
{'%s, %s', {romanized, extra}}, -- 3 - romanized, extra
{'%s', {native}}, -- 4 - native
{'%s, %s', {native, extra}}, -- 5 - native, extra
{'%s, %s', {native, romanized}}, -- 6 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra
-- from here english is used in the mapping but not rendered by renderer so not included in the table
{'', {''}}, -- 8 - english
{'%s', {extra}}, -- 9 - extra
{'%s', {romanized}}, -- 10 - romanized
{'%s, %s', {romanized, extra}}, -- 11 - romanized, extra
{'%s', {native}}, -- 12 - native
{'%s, %s', {native, extra}}, -- 13 - native, extra
{'%s, %s', {native, romanized}}, -- 14 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra
}
if english and post then -- rewrite english to include |post=
english = english .. post; -- if english has a value append post else just post
elseif post then
english = post; -- english not set, use post
elseif not english then -- neither are set
english = ''; -- make english an empty string for concatenation
end
if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty)
local content = renderer (args, formatting, extra2);
content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template
return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag
else
return english; -- nothing to be inside ref tag so just return english
end
end
--[=[-------------------------< N I H O N G O >----------------------------------------------------------------
Implement {{nihongo}} using Module:Lang for language and transliteration markup
{{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function nihongo (frame)
return common (frame, 'nihongo')
end
--[=[-------------------------< N I H O N G O 3 >--------------------------------------------------------------
Implement {{nihongo3}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo3 (frame)
return common_romanized_native_translated (frame, 'nihongo3')
end
--[=[-------------------------< N I H O N G O _ K R T >--------------------------------------------------------
Implement {{nihongo krt}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo_krt (frame)
return common_native_romanized_translated (frame, 'nihongo krt')
end
--[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------
Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup
{{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function nihongo_foot (frame)
return common_foot (frame, 'nihongo foot')
end
--[=[-------------------------< H A N Y U >--------------------------------------------------------------------
Implement {{hanyu}} using Module:Lang for language and transliteration markup
{{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function hanyu (frame)
return common (frame, 'hanyu')
end
--[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------
Implement {{hanyu3}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu3 (frame)
return common_romanized_native_translated (frame, 'hanyu3')
end
--[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------
Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu_hrt (frame)
return common_native_romanized_translated (frame, 'hanyu hrt')
end
--[=[-------------------------< H A N Y U _ F O O T >----------------------------------------------------------
Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup
{{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function hanyu_foot (frame)
return common_foot (frame, 'hanyu foot')
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
nihongo = nihongo,
nihongo3 = nihongo3,
nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line
nihongo_krt = nihongo_krt,
nihongo_foot = nihongo_foot,
hanyu = hanyu,
hanyu3 = hanyu3,
hanyu_hrt = hanyu_hrt,
hanyu_foot = hanyu_foot,
}
a76ba0b5728586e6780c54094c300be47fcd3e89
753
752
2023-06-06T18:21:24Z
Otonashi Ayana
2
Undo revision 752 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
Scribunto
text/plain
require('strict');
--[[--------------------------< E R R O R _ M E S S A G E S >--------------------------------------------------
error messaging; keys to this table are the template base names:
'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc
]]
local err_msg = {
['nihongo'] = 'Japanese or romaji text required',
['hanyu'] = 'Chinese or pinyin text required',
}
local err_cat = {
['nihongo'] = '[[Category:Nihongo template errors]]',
['hanyu'] = '[[Category:Hanyu template errors]]',
}
--[[--------------------------< C O N F I G U R A T I O N >----------------------------------------------------
configuration setting for the various templates. keys to this table are the template names without spacing
]]
local cfg = {
['nihongo'] = {
tag = 'ja',
system = 'hepburn',
system_link = '[[w:Hepburn romanization|Hepburn]]',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo3'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo krt'] = {
tag = 'ja',
system = 'hepburn',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['nihongo foot'] = {
tag = 'ja',
system = 'hepburn',
system_link = '[[w:Hepburn romanization|Hepburn]]',
err_msg = err_msg.nihongo,
err_cat = err_cat.nihongo,
},
['hanyu'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[w:Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu3'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu hrt'] = {
tag = 'zh',
system = 'pinyin',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
['hanyu foot'] = {
tag = 'zh',
system = 'pinyin',
system_link = '[[w:Pinyin]]',
err_msg = err_msg.hanyu,
err_cat = err_cat.hanyu,
},
}
--[[--------------------------< E R R O R _ M E S S A G E >----------------------------------------------------
Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese>
or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors
]]
local function error_message (template)
local msg = {'<span class="error" style="font-size:100%">error: {{'};
table.insert (msg, template);
table.insert (msg, '}}: ');
table.insert (msg, cfg[template].err_msg);
table.insert (msg, ' ([[Template:');
table.insert (msg, template);
table.insert (msg, '|help]])</span>');
if 0 == mw.title.getCurrentTitle().namespace then
table.insert (msg, cfg[template].err_cat);
end
return table.concat (msg);
end
--[[--------------------------< R E N D E R E R >--------------------------------------------------------------
Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{}
from set/unset parameters:
args[1] (english text) has a value of 8 (set) or 0 (unset)
args[2] (native text) has a value of 4
args[3] (romanized text) has a value of 2
args[4] (extra) has a value of 1
index, the sum of these values, gets the appropriate format string from formatting{} table with associated values
from the formatting[index][2] table
]]
local function renderer (args, formatting, extra2)
local output;
local index = 0; -- index into formatting{}
local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1)
for i=1, 5 do -- spin through args[1] – args[4]
index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{}
end
output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil;
if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{}
output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced
end -- (nihongo and nihongo3) or removed (nihongo foot)
return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close
end
--[[--------------------------< R O M A N I Z E D _ K E R N >--------------------------------------------------
Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis
In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses
(<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>)
<ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced)
<romanized> is the return from lang_module._transl() so is not wrapped in parentheses
]]
local function romanized_kern (ret_string, romanized)
if not romanized or ('' == romanized) then -- if romanized not set
return ret_string; -- then we're done
end
local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags
romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters
local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else
local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else
local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis
local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis
local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture
local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture
if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then
ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned
end
if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then
ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned
end
return ret_string; -- done
end
--[[--------------------------< C O M M O N >------------------------------------------------------------------
Common support for {{nihongo}} and {{hanyu}}
render order: is translated (English), native, romanized
<template> is used to select the appropriate cfg table
]]
local function common (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized)
{'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized)
{'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >----------
Common support for {{nihongo3}} and {{hanyu3}}
render order: is romanized, native, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_romanized_native_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>(%s)', {native}}, -- 4 - native
{'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra)
{'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native)
{'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native)
{'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra)
{'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english)
{'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >----------
Common support for {{nihongo krt}} and {{hanyu krt}}
render order: is native, romanized, translated (English)
<template> is used to select the appropriate cfg table
]]
local function common_native_romanized_translated (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
native = native and lang_module._lang ({cfg[template].tag, native}) or nil;
romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil;
local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns
{'<5p4n>(%s)', {extra}}, -- 1 - (extra)
{'%s<5p4n>', {romanized}}, -- 2 - romanized
{'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra)
{'<5p4n>%s', {native}}, -- 4 - native
{'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra)
{'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized)
{'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra)
{'%s<5p4n>', {english}}, -- 8 - english
{'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra)
{'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english)
{'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra)
{'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english)
{'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra)
{'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english)
{'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra)
}
local ret_string = renderer (args, formatting, extra2)
ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate
ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags
return ret_string; -- because gsub returns the number of replacements made as second return value
end
--[[--------------------------< C O M M O N _ F O O T >--------------------------------------------------------
Common support for {{nihongo foot}} and {{hanyu foot}}
render order: is English<ref>native, romanized</ref>
<template> is used to select the appropriate cfg table
]]
local function common_foot (frame, template)
local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else
local args = require ('Module:Arguments').getArgs (frame);
local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names
args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer()
local post = args[6] or args.post;
local group = args.group;
local ref_name = args.ref_name
local lead = 'yes' == args.lead; -- make boolean
if not (native or romanized) then -- not present, return an error message
return error_message (template);
end
if native then
native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix
end
if romanized then
romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil;
end
local formatting = {
{'%s', {extra}}, -- 1 - extra
{'%s', {romanized}}, -- 2 - romanized
{'%s, %s', {romanized, extra}}, -- 3 - romanized, extra
{'%s', {native}}, -- 4 - native
{'%s, %s', {native, extra}}, -- 5 - native, extra
{'%s, %s', {native, romanized}}, -- 6 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra
-- from here english is used in the mapping but not rendered by renderer so not included in the table
{'', {''}}, -- 8 - english
{'%s', {extra}}, -- 9 - extra
{'%s', {romanized}}, -- 10 - romanized
{'%s, %s', {romanized, extra}}, -- 11 - romanized, extra
{'%s', {native}}, -- 12 - native
{'%s, %s', {native, extra}}, -- 13 - native, extra
{'%s, %s', {native, romanized}}, -- 14 - native romanized
{'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra
}
if english and post then -- rewrite english to include |post=
english = english .. post; -- if english has a value append post else just post
elseif post then
english = post; -- english not set, use post
elseif not english then -- neither are set
english = ''; -- make english an empty string for concatenation
end
if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty)
local content = renderer (args, formatting, extra2);
content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template
return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag
else
return english; -- nothing to be inside ref tag so just return english
end
end
--[=[-------------------------< N I H O N G O >----------------------------------------------------------------
Implement {{nihongo}} using Module:Lang for language and transliteration markup
{{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function nihongo (frame)
return common (frame, 'nihongo')
end
--[=[-------------------------< N I H O N G O 3 >--------------------------------------------------------------
Implement {{nihongo3}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo3 (frame)
return common_romanized_native_translated (frame, 'nihongo3')
end
--[=[-------------------------< N I H O N G O _ K R T >--------------------------------------------------------
Implement {{nihongo krt}} using Module:Lang for language and transliteration markup
Similar to {{nihongo}} but changes rendered order and does not support |lead=
{{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function nihongo_krt (frame)
return common_native_romanized_translated (frame, 'nihongo krt')
end
--[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------
Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup
{{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <japanese>, and <romaji> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<japanese>: Japanese language text using Japanese script; TODO: require?
<romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function nihongo_foot (frame)
return common_foot (frame, 'nihongo foot')
end
--[=[-------------------------< H A N Y U >--------------------------------------------------------------------
Implement {{hanyu}} using Module:Lang for language and transliteration markup
{{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
]=]
local function hanyu (frame)
return common (frame, 'hanyu')
end
--[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------
Implement {{hanyu3}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu3 (frame)
return common_romanized_native_translated (frame, 'hanyu3')
end
--[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------
Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup
Similar to {{hanyu}} but changes rendered order and does not support |lead=
{{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
]=]
local function hanyu_hrt (frame)
return common_native_romanized_translated (frame, 'hanyu hrt')
end
--[=[-------------------------< H A N Y U _ F O O T >----------------------------------------------------------
Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup
{{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}}
<English>, <chinese>, and <pinyin> are positional parameters
<English>: rendered as presented; purports to be English translation of <kanji/kana>
<chinese>: Chinese language text using Chinese script; TODO: require?
<pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'?
<extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic
<extra> is rendered as presented preceeded with <comma><space>
<extra2> is rendered as presented preceeded with <space>
<post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>)
|lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization;
TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes
in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support)
|group=: the group attribute in <ref group="..."> and in {{reflist}}
]=]
local function hanyu_foot (frame)
return common_foot (frame, 'hanyu foot')
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
nihongo = nihongo,
nihongo3 = nihongo3,
nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line
nihongo_krt = nihongo_krt,
nihongo_foot = nihongo_foot,
hanyu = hanyu,
hanyu3 = hanyu3,
hanyu_hrt = hanyu_hrt,
hanyu_foot = hanyu_foot,
}
7b75c6096a9fe164e76efb2fd2de53544bbe7c1c
Cartagra
0
194
754
684
2023-06-06T18:23:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Premise ==
== Characters ==
== See also ==
* [[Cartagra/Endings|Endings]]
[[Category:Cartagra]]
1c5b1b686ed91366a890cc822a489dcaf144e3db
757
754
2023-06-06T18:28:28Z
Otonashi Ayana
2
/* See also */
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Premise ==
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
[[Category:Cartagra]]
2e5e4af6261e1653bba9af630dca2287ea0a785a
770
757
2023-06-06T19:01:25Z
Otonashi Ayana
2
/* Premise */
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl.
== Premise ==
In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in the investigation into a string of bizarre murders that are plaguing Ueno.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
[[Category:Cartagra]]
af5cffc3724e24d8ef657d3657277ba4c8f01984
771
770
2023-06-06T19:03:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series.
== Premise ==
In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in the investigation into a string of bizarre murders that are plaguing Ueno.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
[[Category:Cartagra]]
0cf1439f9716d990f8101fe255dd68999abb2bca
772
771
2023-06-06T19:04:38Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series.
== Premise ==
In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in the investigation into a string of bizarre murders that are plaguing Ueno.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
[[Category:Cartagra]]
833a417607ee4d2590c96f1b03abd37cacbed5ed
Template:Kns/cat
10
264
755
2023-06-06T18:25:41Z
Otonashi Ayana
2
Created page with "<includeonly>[[Category:Kara no Shōjo]]</includeonly>"
wikitext
text/x-wiki
<includeonly>[[Category:Kara no Shōjo]]</includeonly>
390d0f6b3cdaefe3eab2d44bef250c523c0ecc88
Kara no Shoujo
0
181
756
659
2023-06-06T18:28:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[Cartagra/Endings|Endings]]
{{kns/cat}}
bef08047c8b0d9755d4a50065a3aeaaaba98a719
758
756
2023-06-06T18:28:33Z
Otonashi Ayana
2
/* See also */
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
d45859bd8dfb1894b0564369861bc7fce9096f5c
773
758
2023-06-06T19:11:25Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist in a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
efcc3742f38a3121ca33ce586c18aee22b91d331
774
773
2023-06-06T19:11:42Z
Otonashi Ayana
2
/* Premise */
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
2cff0ec06b5ec95edcb0c763030ef01db72fe128
Cartagra/Endings
0
230
759
685
2023-06-06T18:29:16Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{cartagra}} has numerous Bad Ends, two neutral Ends, and one True End.
=== Neutral End (Hatsune) ===
=== Neutral End (Kazuna) ===
=== True End ===
Obtainable only after completing Kazuna's neutral End.
=== Bad Ends ===
; {{o|Takako|Ayasaki}} Ending (Nightmare Ending)
; {{o|Kaori|Fukamizu}} Ending (Nun Ending)
; {{o|Nana|Takashiro}} Ending
; Koyuki & Seri Ending
6ffe10d615841789f0fc12599410f46f5dd1ffd5
Kara no Shoujo/Endings
0
265
760
2023-06-06T18:44:02Z
Otonashi Ayana
2
Created page with "{{kns}} has numerous Bad Ends, four neutral Ends, and one True End. === Neutral End ({{o|Shinji|Mamiya}}) === === Neutral End (II) === === Neutral End (III) === *If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found. === Neutral End (IV) === === True End (Azure Bird) === In order to get this ending, Reiji must: * Look at Toko's painting === Bad Ends === ; {{o|Orihime|Tsukishima}} ; {{o..."
wikitext
text/x-wiki
{{kns}} has numerous Bad Ends, four neutral Ends, and one True End.
=== Neutral End ({{o|Shinji|Mamiya}}) ===
=== Neutral End (II) ===
=== Neutral End (III) ===
*If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found.
=== Neutral End (IV) ===
=== True End (Azure Bird) ===
In order to get this ending, Reiji must:
* Look at Toko's painting
=== Bad Ends ===
; {{o|Orihime|Tsukishima}}
; {{o|Toko|Mizuhara}}
; {{o|Nene|Akazaki}}
; Toko Died
; Toko Survived
620a968aed0333795b21159421781d9808c3229c
761
760
2023-06-06T18:44:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:Kara no Shōjo/Endings}}
{{kns}} has numerous Bad Ends, four neutral Ends, and one True End.
=== Neutral End ({{o|Shinji|Mamiya}}) ===
=== Neutral End (II) ===
=== Neutral End (III) ===
*If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found.
=== Neutral End (IV) ===
=== True End (Azure Bird) ===
In order to get this ending, Reiji must:
* Look at Toko's painting
=== Bad Ends ===
; {{o|Orihime|Tsukishima}}
; {{o|Toko|Mizuhara}}
; {{o|Nene|Akazaki}}
; Toko Died
; Toko Survived
7b5250f385ac3eee905297a7f86692603d15b3e3
762
761
2023-06-06T18:45:06Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''/Endings}}
{{kns}} has numerous Bad Ends, four neutral Ends, and one True End.
=== Neutral End ({{o|Shinji|Mamiya}}) ===
=== Neutral End (II) ===
=== Neutral End (III) ===
*If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found.
=== Neutral End (IV) ===
=== True End (Azure Bird) ===
In order to get this ending, Reiji must:
* Look at Toko's painting
=== Bad Ends ===
; {{o|Orihime|Tsukishima}}
; {{o|Toko|Mizuhara}}
; {{o|Nene|Akazaki}}
; Toko Died
; Toko Survived
bd33ed06cf9ddcefdcbcd22bb083e26fb4c71e04
Kara no Shōjo
0
266
763
2023-06-06T18:45:52Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo]]
0bf375957100375d059b3b83ab5cc9da24088021
How to see spoilers
0
267
764
2023-06-06T18:47:50Z
Otonashi Ayana
2
Created page with "In order to '''see spoilers''' on this wiki, follow these steps: # Register an account # Go to your profile preferences # Go to the "Gadgets" tab # Under the "Spoilers" header, select which games you would like to see spoilers for"
wikitext
text/x-wiki
In order to '''see spoilers''' on this wiki, follow these steps:
# Register an account
# Go to your profile preferences
# Go to the "Gadgets" tab
# Under the "Spoilers" header, select which games you would like to see spoilers for
191a224c630d5963fb171ead56425469eddb7089
765
764
2023-06-06T18:48:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
In order to '''see spoilers''' on this wiki, follow these steps:
# [[Special:CreateAccount|Create an account]]
# Go to your profile preferences
# Go to the "Gadgets" tab
# Under the "Spoilers" header, select which games you would like to see spoilers for
8a7b136e233ebfc51e81a4ced4aeacff778354c6
766
765
2023-06-06T18:49:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
In order to '''see spoilers''' on this wiki, follow these steps:
# [[Special:CreateAccount|Create an account]]
# Go to your [[Special:Preferences|profile preferences]]
# Go to the "[[Special:Preferences#mw-prefsection-gadgets|Gadgets]]" tab
# Under the "Spoilers" header, select which games you would like to see spoilers for
87d52ac7dec91a1eb1223e192c24201d639ca42a
767
766
2023-06-06T18:50:17Z
Otonashi Ayana
2
wikitext
text/x-wiki
In order to '''see spoilers''' on this wiki, follow these steps:
# [[Special:CreateAccount|Create an account]]
# Go to the "[[Special:Preferences#mw-prefsection-gadgets|Gadgets]]" tab under your profile preferences page.
# Under the "Spoilers" header, select which games you would like to see spoilers for
f02c5d94324ab9ab03f52f54f8f7e5a4866691aa
768
767
2023-06-06T18:51:17Z
Otonashi Ayana
2
wikitext
text/x-wiki
In order to '''see spoilers''' on this wiki, follow these steps:
# [[Special:CreateAccount|Create an account]]
# Go to the "Gadgets" tab under your profile preferences page (''Clicking [[Special:Preferences#mw-prefsection-gadgets|'''this link''']] should take you directly there'')
# Under the "Spoilers" header, select which games you would like to see spoilers for
90de4fa0ac7bb56989e9b01285b4e9f7f22fd930
Category:Articles containing Japanese-language text
14
268
769
2023-06-06T18:55:24Z
Otonashi Ayana
2
Created page with "__HIDDENCAT__"
wikitext
text/x-wiki
__HIDDENCAT__
183b9c38bff80327776bd180634fccfd19cf616f
Template:Kns/nl
10
269
775
2023-06-06T19:13:08Z
Otonashi Ayana
2
Created page with "''Kara no Shōjo''"
wikitext
text/x-wiki
''Kara no Shōjo''
92aeed284b7cce7380ec94de77c1e50485d00b5b
Reiji Tokisaka
0
42
776
319
2023-06-06T19:14:02Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname =
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on to voice him for the release of the Full HD Voice Edition, as well as subsequent {{kns/nl}} titles.
{{kns characters}}
cd8463600d6737981691ac6be74136510b501032
777
776
2023-06-06T19:14:36Z
Otonashi Ayana
2
/* Trivia */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname =
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as subsequent {{kns/nl}} titles.
{{kns characters}}
38cd8f435d889c15a860de3e2cea69d64f6a7d75
778
777
2023-06-06T19:14:54Z
Otonashi Ayana
2
/* Trivia */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname =
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
7d1f7930c393b2a2cb59a5ee95b2999726f85c8b
File:Stoj0102a.png
6
270
779
2023-06-06T19:38:00Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Infobox character/doc
10
169
780
681
2023-06-06T19:38:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
<pre>
{{infobox character
| given name =
| family name =
| jname =
| image = [[File:|x300px]]
| aka =
| gender =
| age =
| appearance =
| seiyu =
}}</pre>
509f1e58e6884b0df129612705cb1e0e58cbf31e
File:Shuy0101a.png
6
271
781
2023-06-06T19:39:14Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Tsuzuriko Yosomiya
0
272
782
2023-06-06T19:39:35Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Tsuzuriko | family name = Yosomiya | jname = | image = [[File:stoj0102a.png|x300px]] | aka = Tojiko | gender = Female | age = | appearance = {{kns}} | seiyu = | relations = }}'''{{c}}''', commonly referred to by the nickname '''Tojiko''', is a student at [[Ouba Girls Academy]]. She is an aspiring writer who frequently submits her works to literary magazines. {{kns characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Tsuzuriko
| family name = Yosomiya
| jname =
| image = [[File:stoj0102a.png|x300px]]
| aka = Tojiko
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
| relations =
}}'''{{c}}''', commonly referred to by the nickname '''Tojiko''', is a student at [[Ouba Girls Academy]]. She is an aspiring writer who frequently submits her works to literary magazines.
{{kns characters}}
20f1eeb4b6abd92ea9bc4b1b685470470bc665b1
Toko Kuchiki
0
273
783
2023-06-06T19:39:41Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Toko | family name = Kuchiki | jname = | image = [[File:shuy0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an enigmatic girl who attends [[Ouba Girls Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens. {{kns characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Toko
| family name = Kuchiki
| jname =
| image = [[File:shuy0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is an enigmatic girl who attends [[Ouba Girls Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens.
{{kns characters}}
2de65bdee6ced26598dd46a30a43d88d26127523
MediaWiki:Common.css
8
7
784
674
2023-06-06T19:44:00Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting:Merienda;
--theme-color:#EFA5A5;
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/* Default style for navigation boxes */
.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em; /* Title, group and above/below styles */
line-height: 1.5em;
text-align: center;
}
th.navbox-group { /* Group style */
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
line-height: 1.8em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox th,
.navbox-title {
background: #ccccff; /* Level 1 color */
}
.navbox-abovebelow,
th.navbox-group,
.navbox-subgroup .navbox-title {
background: #ddddff; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0; /* Adjust hlist padding in navboxes */
}
ol + table.navbox,
ul + table.navbox {
margin-top: 0.5em; /* Prevent lists from clinging to navboxes */
}
/* Default styling for Navbar template */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar ul {
display: inline;
white-space: nowrap;
}
.navbar li {
word-spacing: -0.125em;
}
.navbar.mini li span {
font-variant: small-caps;
}
/* Navbar styling when nested in infobox and navbox */
.infobox .navbar {
font-size: 100%;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
width: 6em;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
385d5f0955358f8260a941b72a0880e691b5f730
File:Academy front.png
6
274
785
2023-06-06T19:46:29Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Ouba Private Girls' Academy
0
275
786
2023-06-06T19:51:34Z
Otonashi Ayana
2
Created page with "[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|]]. {{locations}}"
wikitext
text/x-wiki
[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]].
{{locations}}
a25f9addb2f0811aa6a0b568aefca4d2820d9de0
789
786
2023-06-06T19:55:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]].
=== Known Students ===
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tori|Kohane}}
* {{n|Ayumu|Sato}}
* {{n|Orihime|Tsukishime}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Yui|Nishizono}}
* {{n|Haruka|Imamura}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takigawa}}
=== Known Faculty ===
* {{n|Tokio|Saeki}}
* {{n|Tatsuhiko|Kusaka}}
* {{n|Nene|Akazaki}}
* {{n|Reiji|Tokisaka}} (temporary)
{{locations}}
7bedf232c036066ff29cfe12c85a8498580e5072
Category:Locations
14
277
788
2023-06-06T19:52:05Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Template:Breadcrumb
10
278
792
791
2023-06-06T20:06:14Z
Otonashi Ayana
2
1 revision imported from [[:wikipedia:Template:Breadcrumb]]: w
wikitext
text/x-wiki
<div role="navigation" aria-label="Breadcrumb" id="contentSub" class="plainlinks nourlexpansion" style="position:relative;{{#switch:{{{28px}}}|yes|yes=bottom:28px;}}" {{#switch:{{{align}}}|right|right=align="right"}}{{#switch:{{{right}}}|yes|yes=align="right"}}><span class="subpages">{{{1<noinclude>|< [[Breadcrumb (navigation)|Breadcrumb]]</noinclude>}}}{{
#if:{{{2|<noinclude>2</noinclude>}}}| | {{{2<noinclude>|2</noinclude>}}}}}{{
#if:{{{3|<noinclude>3</noinclude>}}}| | {{{3<noinclude>|3</noinclude>}}}}}{{
#if:{{{4|<noinclude>4</noinclude>}}}| | {{{4<noinclude>|4</noinclude>}}}}}{{
#if:{{{5|<noinclude>5</noinclude>}}}| | {{{5<noinclude>|5</noinclude>}}}}}</span></div><noinclude>
{{documentation|content=
There is also an optional parameter named <nowiki>{{{align}}}</nowiki>, which allows users to align their breadcrumb at the right side of the page. Use <code><nowiki>|align=right</nowiki></code> to do so. If you are using a back and forth system using two breadcrumbs on a single page, please also add the optional <code><nowiki>|28px=yes</nowiki></code> parameter to the breadcrumb at the right side.
[[Category:Wikipedia formatting and function templates]]
}}</noinclude>
e5e41ee10cee6ebf0e4bb1d4310051f1989deb87
Template:Subpage
10
279
794
2023-06-06T20:10:16Z
Otonashi Ayana
2
Created page with "<div style="font-size:12px;margin-left:12px;margin-top:-12px;margin-bottom:10px;">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div>"
wikitext
text/x-wiki
<div style="font-size:12px;margin-left:12px;margin-top:-12px;margin-bottom:10px;">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div>
a6e57eda30b8a1a008329663453c07df011d60e7
796
794
2023-06-06T20:12:00Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="subpages">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span>
edc59325a650572101edc3e2adbf097a18a41196
797
796
2023-06-06T20:12:40Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="crumb">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span>
cf91ff61cca9a014281e13d9fb494ea9e4f1991d
798
797
2023-06-06T20:14:48Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><span class="crumb">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span>
5515b1000b7b4abbe3674087d5e11b917db7223c
800
798
2023-06-06T20:17:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><span class="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span>
ed059d295974730ee6ac971cab32e97942ec33ba
802
800
2023-06-06T20:20:14Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><div class="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div>
00e50a5359a00cb85dd60c926f4124e7a30e550a
Template:Subpage/styles.css
10
280
799
2023-06-06T20:17:10Z
Otonashi Ayana
2
Created page with ".crumb{ font-size: 84%; } .crumb::before{ content: '< '; }"
sanitized-css
text/css
.crumb{
font-size: 84%;
}
.crumb::before{
content: '< ';
}
c2d2e35b3ec0cdedd9d3f436fe10fe1daec9d4df
Template:Subpage/styles.css
10
280
803
799
2023-06-06T20:21:09Z
Otonashi Ayana
2
sanitized-css
text/css
.crumb{
font-size: 84%;
line-height: 1.2em;
}
.crumb::before{
content: '< ';
}
c8cb4bef5ea9f70f99e476a5b1ed9118dd5417c1
810
803
2023-06-06T20:26:09Z
Otonashi Ayana
2
sanitized-css
text/css
.crumb{
font-size: 84%;
line-height: 1.2em;
margin: -16px 0 16px 0;
}
.crumb::before{
content: '< ';
}
dda98dffbe9de9b405af31af03912c9e933bad7b
811
810
2023-06-06T20:26:30Z
Otonashi Ayana
2
sanitized-css
text/css
.crumb{
font-size: 84%;
line-height: 1.2em;
margin: -10px 0 16px 0;
}
.crumb::before{
content: '< ';
}
bf20f35f843de114b0d4b3a9303cdd4839445cb4
812
811
2023-06-06T20:26:56Z
Otonashi Ayana
2
sanitized-css
text/css
.crumb{
font-size: 84%;
line-height: 1.2em;
margin: -8px 0 16px 0;
}
.crumb::before{
content: '< ';
}
63e53453e3b865dd72f323d21c6050b4e0e37145
Template:Subpage
10
279
804
802
2023-06-06T20:22:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><div class="contentSub"><span class="subpages"{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span></div>
c236f77ce4ab34bd87589014b8d473d7d1760792
805
804
2023-06-06T20:22:16Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><div id="contentSub"><span class="subpages">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span></div>
a9abc37ff2172333d49e9c68573167c9d91144fe
806
805
2023-06-06T20:23:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><div id="contentSub"><span class="subpages">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span></div>
0ed088716082222984b019026110ec42873ea939
808
806
2023-06-06T20:23:59Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><div id="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div>
fa01cdf5af51c8248706cf38a9962aaaf9f482de
809
808
2023-06-06T20:24:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Subpage/styles.css" /><div class="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div>
00e50a5359a00cb85dd60c926f4124e7a30e550a
Ouba Private Girls' Academy
0
275
807
789
2023-06-06T20:23:19Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]].
=== Known Students ===
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tori|Kohane}}
* {{n|Ayumu|Sato}}
* {{n|Orihime|Tsukishime}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Yui|Nishizono}}
* {{n|Haruka|Imamura}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takigawa}}
=== Known Faculty ===
* {{n|Tokio|Saeki}}
* {{n|Tatsuhiko|Kusaka}}
* {{n|Nene|Akazaki}}
* {{n|Reiji|Tokisaka}} (temporary)
{{locations}}
6cdc56ac953d88edfbb25fd5d48c2edf80153561
814
807
2023-06-06T20:28:54Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Ouba Girls Academy]] to [[Ouba Private Girls' Academy]]
wikitext
text/x-wiki
{{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]].
=== Known Students ===
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tori|Kohane}}
* {{n|Ayumu|Sato}}
* {{n|Orihime|Tsukishime}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Yui|Nishizono}}
* {{n|Haruka|Imamura}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takigawa}}
=== Known Faculty ===
* {{n|Tokio|Saeki}}
* {{n|Tatsuhiko|Kusaka}}
* {{n|Nene|Akazaki}}
* {{n|Reiji|Tokisaka}} (temporary)
{{locations}}
6cdc56ac953d88edfbb25fd5d48c2edf80153561
816
814
2023-06-06T20:29:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]''{{PAGENAME}}''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]].
=== Known Students ===
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tori|Kohane}}
* {{n|Ayumu|Sato}}
* {{n|Orihime|Tsukishime}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Yui|Nishizono}}
* {{n|Haruka|Imamura}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takigawa}}
=== Known Faculty ===
* {{n|Tokio|Saeki}}
* {{n|Tatsuhiko|Kusaka}}
* {{n|Nene|Akazaki}}
* {{n|Reiji|Tokisaka}} (temporary)
{{locations}}
3b36eda579c18bb3436d6244b082f02920cf146d
817
816
2023-06-06T20:29:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]'''{{PAGENAME}}''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]].
=== Known Students ===
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tori|Kohane}}
* {{n|Ayumu|Sato}}
* {{n|Orihime|Tsukishime}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Yui|Nishizono}}
* {{n|Haruka|Imamura}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takigawa}}
=== Known Faculty ===
* {{n|Tokio|Saeki}}
* {{n|Tatsuhiko|Kusaka}}
* {{n|Nene|Akazaki}}
* {{n|Reiji|Tokisaka}} (temporary)
{{locations}}
638dca905863d9cd883dec72b23f828f9be2428a
List of locations
0
281
813
2023-06-06T20:28:31Z
Otonashi Ayana
2
Created page with "* [[Ouba Private Girls' Academy]] * [[Moon World]] * [[Kuchiki Residence]] * [[Kuchiki Hospital]] * [[Shinjuku Station]] * [[Tokisaka Detective Agency]]"
wikitext
text/x-wiki
* [[Ouba Private Girls' Academy]]
* [[Moon World]]
* [[Kuchiki Residence]]
* [[Kuchiki Hospital]]
* [[Shinjuku Station]]
* [[Tokisaka Detective Agency]]
be016398cbeb3629be25e8960f48c22548fbe452
Ouba Girls Academy
0
282
815
2023-06-06T20:28:54Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Ouba Girls Academy]] to [[Ouba Private Girls' Academy]]
wikitext
text/x-wiki
#REDIRECT [[Ouba Private Girls' Academy]]
958064dcbeb0a373cf9a7743773304a4c42f77db
File:Favicon.ico
6
283
818
2023-06-06T20:35:35Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
821
818
2023-06-06T20:44:26Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Favicon.ico]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
823
821
2023-06-06T21:25:35Z
Otonashi Ayana
2
Otonashi Ayana reverted [[File:Favicon.ico]] to an old version
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Favicon.png
6
284
819
2023-06-06T20:36:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
820
819
2023-06-06T20:43:38Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Favicon.png]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
824
820
2023-06-06T21:25:50Z
Otonashi Ayana
2
Otonashi Ayana reverted [[File:Favicon.png]] to an old version
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
File:Wiki logo.png
6
285
822
2023-06-06T21:24:58Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
828
822
2023-06-06T22:24:51Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Wiki logo.png]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
829
828
2023-06-06T22:26:18Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Wiki logo.png]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
838
829
2023-06-06T23:30:29Z
Otonashi Ayana
2
Otonashi Ayana reverted [[File:Wiki logo.png]] to an old version
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
839
838
2023-06-06T23:31:07Z
Otonashi Ayana
2
Otonashi Ayana reverted [[File:Wiki logo.png]] to an old version
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
MediaWiki:Common.css
8
7
825
784
2023-06-06T21:36:25Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting:Merienda;
--theme-color:#EFA5A5;
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/* Default style for navigation boxes */
.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em; /* Title, group and above/below styles */
line-height: 1.5em;
text-align: center;
}
th.navbox-group { /* Group style */
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
line-height: 1.8em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox th,
.navbox-title {
background: #ccccff; /* Level 1 color */
}
.navbox-abovebelow,
th.navbox-group,
.navbox-subgroup .navbox-title {
background: #ddddff; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0; /* Adjust hlist padding in navboxes */
}
ol + table.navbox,
ul + table.navbox {
margin-top: 0.5em; /* Prevent lists from clinging to navboxes */
}
/* Default styling for Navbar template */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar ul {
display: inline;
white-space: nowrap;
}
.navbar li {
word-spacing: -0.125em;
}
.navbar.mini li span {
font-variant: small-caps;
}
/* Navbar styling when nested in infobox and navbox */
.infobox .navbar {
font-size: 100%;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
width: 6em;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
6b33cb467ff4827f4cd24970e268f6dfa81b9cd8
840
825
2023-06-07T02:30:55Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/* Default style for navigation boxes */
.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em; /* Title, group and above/below styles */
line-height: 1.5em;
text-align: center;
}
th.navbox-group { /* Group style */
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
line-height: 1.8em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox th,
.navbox-title {
background: #ccccff; /* Level 1 color */
}
.navbox-abovebelow,
th.navbox-group,
.navbox-subgroup .navbox-title {
background: #ddddff; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0; /* Adjust hlist padding in navboxes */
}
ol + table.navbox,
ul + table.navbox {
margin-top: 0.5em; /* Prevent lists from clinging to navboxes */
}
/* Default styling for Navbar template */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar ul {
display: inline;
white-space: nowrap;
}
.navbar li {
word-spacing: -0.125em;
}
.navbar.mini li span {
font-variant: small-caps;
}
/* Navbar styling when nested in infobox and navbox */
.infobox .navbar {
font-size: 100%;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
width: 6em;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
f8684745c2e14d20d9fdf18ee35a134dbe36e9d5
842
840
2023-06-07T02:44:48Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
}
/* Variable lines that don't work with templatestyles because of course */
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/* Default style for navigation boxes */
.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em; /* Title, group and above/below styles */
line-height: 1.5em;
text-align: center;
}
th.navbox-group { /* Group style */
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
line-height: 1.8em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox th,
.navbox-title {
background: #ccccff; /* Level 1 color */
}
.navbox-abovebelow,
th.navbox-group,
.navbox-subgroup .navbox-title {
background: #ddddff; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0; /* Adjust hlist padding in navboxes */
}
ol + table.navbox,
ul + table.navbox {
margin-top: 0.5em; /* Prevent lists from clinging to navboxes */
}
/* Default styling for Navbar template */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar ul {
display: inline;
white-space: nowrap;
}
.navbar li {
word-spacing: -0.125em;
}
.navbar.mini li span {
font-variant: small-caps;
}
/* Navbar styling when nested in infobox and navbox */
.infobox .navbar {
font-size: 100%;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
width: 6em;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
54a36a9965fb6f6b6be0c521ca72cc587309f078
844
842
2023-06-07T02:47:07Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/* Default style for navigation boxes */
.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em; /* Title, group and above/below styles */
line-height: 1.5em;
text-align: center;
}
th.navbox-group { /* Group style */
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
line-height: 1.8em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox th,
.navbox-title {
background: #ccccff; /* Level 1 color */
}
.navbox-abovebelow,
th.navbox-group,
.navbox-subgroup .navbox-title {
background: #ddddff; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0; /* Adjust hlist padding in navboxes */
}
ol + table.navbox,
ul + table.navbox {
margin-top: 0.5em; /* Prevent lists from clinging to navboxes */
}
/* Default styling for Navbar template */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar ul {
display: inline;
white-space: nowrap;
}
.navbar li {
word-spacing: -0.125em;
}
.navbar.mini li span {
font-variant: small-caps;
}
/* Navbar styling when nested in infobox and navbox */
.infobox .navbar {
font-size: 100%;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
width: 6em;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
82b99331272226ef7289149f28f40f24e79a70af
845
844
2023-06-07T02:49:44Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
f45686ba614907ba5265ab9ea3f12c4632bd0ecf
846
845
2023-06-07T19:26:37Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
fbb327cec9268341c10e93a75718dbf21f2463a8
847
846
2023-06-07T19:35:07Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
body{
color: var(--color-white) !important;
}
h1, h2, h3, h4, h5, h6{
color: var(--color-white-2) !important;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
cac3f451ed770572e0189c118e50df4493faac0a
848
847
2023-06-07T19:39:32Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
body{
color: var(--color-white) !important;
}
h1, h2, h3, h4, h5, h6{
color: var(--color-white-2) !important;
}
.mw-list-item-selected a{
color: var(--color-white) !important;
}
#mw-panel{
background-color: var(--color-base-2);
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
55f6d1a621abb7546b8665d2e8c6aa05b720da8b
849
848
2023-06-07T19:45:32Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
body{
color: var(--color-white) !important;
}
h1, h2, h3, h4, h5, h6{
color: var(--color-white-2) !important;
}
a{
color: var(--color-blue) !important;
}
.mw-list-item-selected a{
color: var(--color-white) !important;
}
#mw-panel{
background-color: var(--color-base-2);
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
2c7fe169b2e39221001622cbf4d6563006b7dc9e
850
849
2023-06-07T19:46:46Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
body{
color: var(--color-white) !important;
}
h1, h2, h3, h4, h5, h6{
color: var(--color-white-2) !important;
}
a{
color: var(--color-blue);
}
.mw-list-item-selected a{
color: var(--color-white) !important;
}
#mw-panel{
background-color: var(--color-base-2);
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
58dcbb800cac6ec877a93d72387bc8e10232950d
851
850
2023-06-07T19:57:21Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
body, li{
color: var(--color-white) !important;
}
h1, h2, h3, h4, h5, h6{
color: var(--color-white-2) !important;
}
a{
color: var(--color-blue);
}
ul {
list-style: none; /* Remove default bullets */
}
ul li::before {
content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */
color: var(--color-white); /* Change the color */
font-weight: bold; /* If you want it to be bold */
display: inline-block; /* Needed to add space between the bullet and the text */
width: 1em;
margin-left: -1em;
}
.mw-list-item-selected a{
color: var(--color-white) !important;
}
#mw-panel{
background-color: var(--color-base-2);
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
a1df4d021d25e94c5f1ae05753250d834116a44f
852
851
2023-06-07T20:13:43Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
body, li{
color: var(--color-white) !important;
}
h1, h2, h3, h4, h5, h6{
color: var(--color-white-2) !important;
}
a, .mw-list-item a{
color: var(--color-blue);
}
.mw-body ul {
list-style: none; /* Remove default bullets */
}
.mw-body ul li::before {
content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */
color: var(--color-white); /* Change the color */
font-weight: bold; /* If you want it to be bold */
display: inline-block; /* Needed to add space between the bullet and the text */
width: 1em;
margin-left: -1em;
}
.mw-list-item-selected a{
color: var(--color-white) !important;
}
#mw-panel{
background-color: var(--color-base-2);
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
02e9ceaf869175fcfb488ac947b2f9c2977c793f
853
852
2023-06-07T20:18:49Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
.mw-page-container{
background-color: var(--color-base) !important;
}
body, li{
color: var(--color-white) !important;
}
h1, h2, h3, h4, h5, h6{
color: var(--color-white-2) !important;
}
a, .mw-list-item a{
color: var(--color-blue);
}
.mw-parser-output ul {
list-style: none; /* Remove default bullets */
}
.mw-parser-output ul li::before {
content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */
color: var(--color-white); /* Change the color */
font-weight: bold; /* If you want it to be bold */
display: inline-block; /* Needed to add space between the bullet and the text */
width: 1em;
margin-left: -1em;
}
.mw-list-item-selected a{
color: var(--color-white) !important;
}
#mw-panel{
background-color: var(--color-base-2);
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
66a7b943c085cd3c5631cdfc5de17da1e56d9af5
854
853
2023-06-07T20:23:55Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #8C3838;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
0b63c36a686c4d38f77e78d9716a5f3253ba104a
857
854
2023-06-07T22:12:54Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #D39292;
--color-theme-2: #8C2A2A;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
7b9a3aa80c8a5c1ac4c5fe37a38a3bf6983195a2
859
857
2023-06-09T14:42:22Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
4c4cc9fd342a6e679e782a2f9e3458023d0d1f0b
File:Wiki wordmark.svg
6
287
836
2023-06-06T23:07:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
837
836
2023-06-06T23:09:20Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Wiki wordmark.svg]]
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Template:Infobox character
10
2
841
679
2023-06-07T02:32:24Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox
| abovestyle = font-weight:normal;
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
793bd9e4d0ce6f2190bdf3755101f4f785d8b49e
855
841
2023-06-07T20:28:22Z
Otonashi Ayana
2
Undo revision 841 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
wikitext
text/x-wiki
<includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
bd7b8cc02ceeb0e7a50b512b576d02e108f83238
856
855
2023-06-07T22:10:25Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox
| abovestyle = background:var(--color-theme);font-weight:normal;
| headerstyle = background:var(--color-theme);
| bodystyle = border-spacing:3.5px;
| above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}}
| header1 = Character Information
| image = {{{image}}}
| label2 = Also Known As
| data2 = {{{aka|}}}
| label3 = Gender
| data3 = {{{gender|}}}
| label4 = Age
| data4 = {{{age|}}}
| label5 = Likes
| data5 = {{{likes|}}}
| label6 = First Appearance
| data6 = {{{appearance}}}
| label7 = Portrayed By
| data7 = {{{seiyu|}}}
| label8 = Relationships
| data8 = {{{relations|}}}
}}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly>
<noinclude>{{documentation}}</noinclude>
4b09feb1200d29797745b6a5c74672d752dab056
Module:Navbox/styles.css
828
96
843
209
2023-06-07T02:44:52Z
Otonashi Ayana
2
sanitized-css
text/css
/* {{pp|small=y}} */
.navbox {
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */
.navbox + .navbox-styles + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em;
line-height: 1.5em;
text-align: center;
}
.navbox-group {
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd;
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox-list-with-group {
text-align: left;
border-left-width: 2px;
border-left-style: solid;
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background-color: #f7f7f7;
}
.navbox-odd {
background-color: transparent;
}
/* TODO: figure out how to remove reliance on td as structure */
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
}
b2d71534c22c7c462f60126d36ae6842f62de507
Reiji Tokisaka
0
42
858
778
2023-06-09T14:11:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}{{nihongo|'''{{c}}'''|時坂玲人}} is the protagonist of {{kns}}.
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
d74d029bde2cdaf74ffcf7bdf0eeb4011f1bd46e
Tsuzuriko Yosomiya
0
272
860
782
2023-06-09T14:43:20Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Tsuzuriko
| family name = Yosomiya
| jname = 四十宮 綴子
| image = [[File:stoj0102a.png|x300px]]
| aka = Tojiko
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
| relations =
}}{{nihongo|'''{{c}}'''|四十宮 綴子}}, commonly referred to by the nickname {{nihongo|'''Tojiko'''|トージコ}}, is a student at [[Ouba Girls Academy]]. She is an aspiring writer who frequently submits her work to literary magazines.
{{kns characters}}
b193f508c54b5c755da610aaeb81964636704239
Template:Spoiler
10
64
861
129
2023-06-09T14:51:13Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
77db2c57aa150944cd1f6425b849405fb64d4f64
870
861
2023-06-09T15:29:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
afe37ea048ecfb168c896f51a0bad01441c36942
872
870
2023-06-09T15:31:11Z
Otonashi Ayana
2
Undo revision 870 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
77db2c57aa150944cd1f6425b849405fb64d4f64
893
872
2023-06-10T23:12:55Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#if:{{{bullet|yes|
{{#switch: {{{1}}}
| cartagra = * <span class="spoiler-cartagra">{{{2}}}</span>
| kns = * <span class="spoiler-kns">{{{2}}}</span>
| kns2 = * <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = * <span class="spoiler-kns3">{{{2}}}</span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
85d39bd35b58097413a79f5ff493c17e66533ae3
894
893
2023-06-10T23:13:12Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#if:{{{bullet|}}}|yes|
{{#switch: {{{1}}}
| cartagra = * <span class="spoiler-cartagra">{{{2}}}</span>
| kns = * <span class="spoiler-kns">{{{2}}}</span>
| kns2 = * <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = * <span class="spoiler-kns3">{{{2}}}</span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
81970ded5367700879cdb7b0d00338f3722c3a6c
895
894
2023-06-10T23:14:34Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#if:{{{bullet{{!}}}}}|yes|
{{#switch: {{{1}}}
| cartagra = * <span class="spoiler-cartagra">{{{2}}}</span>
| kns = * <span class="spoiler-kns">{{{2}}}</span>
| kns2 = * <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = * <span class="spoiler-kns3">{{{2}}}</span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
1c49bef19ee0106a5a90c85d00f0eb9d5209d18d
896
895
2023-06-10T23:15:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#ifeq:{{{bullet|}}}|yes|
{{#switch: {{{1}}}
| cartagra = * <span class="spoiler-cartagra">{{{2}}}</span>
| kns = * <span class="spoiler-kns">{{{2}}}</span>
| kns2 = * <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = * <span class="spoiler-kns3">{{{2}}}</span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
03bd2bf676840bf75235942fcf1811e4d5b6243e
898
896
2023-06-10T23:18:34Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#ifeq:{{{bullet|}}}|yes|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span>
| kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span>
| kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span>
| kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
025c0d9236e595a1ce1cbb486e5a9a29f560dcd8
Template:Knsp
10
288
863
2023-06-09T15:03:25Z
Otonashi Ayana
2
Created page with ""[[Kara no Shoujo (painting)|Kara no Shōjo]]""
wikitext
text/x-wiki
"[[Kara no Shoujo (painting)|Kara no Shōjo]]"
37ca85b5f9ff5d61ed8e0ac039ad07fd089bff3c
878
863
2023-06-09T15:38:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
''[[Kara no Shoujo (painting)|Kara no Shōjo]]''
0a7adddc04b8e6ea7f3c9c72172d557d8d3d316c
Kara no Shoujo (painting)
0
289
864
2023-06-09T15:06:01Z
Otonashi Ayana
2
Created page with "'''Kara no Shōjo''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}}"
wikitext
text/x-wiki
'''Kara no Shōjo''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}}
8859ed767d3b0409b1ac112dbd7dcf9d29565ee8
877
864
2023-06-09T15:38:20Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}}
59ff5e81180f61ca4f5a0c8bc63a66fa64d88d8e
Tsuzuriko Yosomiya
0
272
867
860
2023-06-09T15:08:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Tsuzuriko
| family name = Yosomiya
| jname = 四十宮 綴子
| image = [[File:stoj0102a.png|x300px]]
| aka = Tojiko
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
| relations =
}}{{nihongo|'''{{c}}'''|四十宮 綴子}}, commonly referred to by the nickname {{nihongo|'''Tojiko'''|トージコ}}, is a student at [[Ouba Private Girls' Academy]]. She is an aspiring writer who frequently submits her work to literary magazines.
== Plot ==
{{spoiler|kns|Tsuzuriko is murdered by {{n|Shinji|Mamiya}} and fashioned into a recreation of ''Kara no Shoujo''.}}
== Relationships ==
{{kns characters}}
80bf2b56307f52d5c72ce18885b5f7f68126ac8e
868
867
2023-06-09T15:08:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Tsuzuriko
| family name = Yosomiya
| jname = 四十宮 綴子
| image = [[File:stoj0102a.png|x300px]]
| aka = Tojiko
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
| relations =
}}{{nihongo|'''{{c}}'''|四十宮 綴子}}, commonly referred to by the nickname {{nihongo|'''Tojiko'''|トージコ}}, is a student at [[Ouba Private Girls' Academy]]. She is an aspiring writer who frequently submits her work to literary magazines.
== Plot ==
{{spoiler|kns|Tsuzuriko is murdered by {{n|Shinji|Mamiya}} and fashioned into a recreation of {{knsp}}.}}
== Relationships ==
{{kns characters}}
7364884736e5741d65de4ba54e07ccac5562b901
MediaWiki:Gadget-spoilers/cartagra.css
8
53
871
128
2023-06-09T15:30:45Z
Otonashi Ayana
2
css
text/css
.spoiler-cartagra{
display:inline !important;
}
1ff711fbd02920280d4fb2b61977f7850e1d8fbf
Template:Spoiler/styles.css
10
290
873
2023-06-09T15:32:05Z
Otonashi Ayana
2
Created page with ".spoiler-cartagra, .spoiler-kns, .spoiler-kns2, .spoiler-kns3{ display:none; }"
sanitized-css
text/css
.spoiler-cartagra,
.spoiler-kns,
.spoiler-kns2,
.spoiler-kns3{
display:none;
}
2e93a4f650bffabcfa68f8f4dc136e3966040a39
MediaWiki:Gadget-spoilers/kns1.css
8
47
874
105
2023-06-09T15:32:37Z
Otonashi Ayana
2
css
text/css
.spoiler-kns{
display:inline !important;
}
ef00cb8a741d9082ca71cfb8bd2cf240a673e068
MediaWiki:Gadget-spoilers/kns2.css
8
51
875
106
2023-06-09T15:32:58Z
Otonashi Ayana
2
css
text/css
.spoiler-kns2{
display:inline !important;
}
dc59992f2d2fa2ded3872d9478b148ca867f0010
MediaWiki:Gadget-spoilers/kns3.css
8
52
876
107
2023-06-09T15:33:10Z
Otonashi Ayana
2
css
text/css
.spoiler-kns3{
display:inline !important;
}
64c6ca0c641c0fd393e352ba6710696c1cdf0ac1
Misa Rokushiki
0
291
879
2023-06-09T15:45:05Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Misa | family name = Rokushiki | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is the biological mother of {{n|Toko|Kuchiki}}. {{kns characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Misa
| family name = Rokushiki
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is the biological mother of {{n|Toko|Kuchiki}}.
{{kns characters}}
45372e8b8e3cb8a5e2360c9c657d9adc04d6dbb2
Template:Cartagra characters
10
201
880
677
2023-06-09T15:55:00Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
* {{n|Kazuna|Kozuki}}
* {{n|Yura|Kozuki}}
* {{n|Nana|Takashiro}}
* {{n|Takako|Ayasaki}}
* {{n|Kaori|Fukamizu}}
* {{n|Tokiko|Shigusa}}
* {{n|Akao|Ikuma}}
* [[Takoyaki vendor]]
| group2 = Yukishiro
| list2 =
* [[Ujaku]]
* [[Rin]]
* [[Otoha]]
* [[Koyuki]]
* [[Seri]]
| group3 = Police
| list3 =
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
}}<includeonly>
[[Category:Cartagra]]
[[Category:Characters]]
</includeonly>
29d4a5ca4a462b0de17399b9241d2c6f7858f1d2
Ryoichi Yaginuma
0
203
881
583
2023-06-09T16:08:20Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Ryoichi
| family name = Yaginuma
| jname =
| image =
| aka =
| gender =
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement from the police force. He takes on a greater role in {{kns}}, where he has since become a founding member of the [[w:National Police Agency (Japan)|NPA]].
== Plot ==
Yaginuma was a frequent patron of the [[Yukishiro]] brothel, with a preference for seeing [[Otoha]]. {{spoiler|cartagra|He plays a pivotal role in the arrest of {{n|Kazuma|Arishima}} after being convinced of his guilt by {{n|Shugo|Takashiro}}.}}
{{cartagra characters|state=collapsed}}
{{kns characters}}
f6fac1bf529fbf97f49c5905288d9d0b822b32c0
Daisaku Arata
0
229
882
682
2023-06-09T16:20:24Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name = Takoyaki vendor
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender =
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
{{cartagra characters}}
5d4586888136db7a63e770d2b4d79271eeae745f
Kazuna Takashiro
0
292
883
2023-06-09T16:26:37Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Kazuna | family name = Takashiro | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = | seiyu = }}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Kazuna
| family name = Takashiro
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance =
| seiyu =
}}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}.
{{cartagra characters|state=collapsed}}
{{kns characters}}
b7cc702e56356bd7b1a44d3f62a0dfa719ea017f
887
883
2023-06-09T16:38:32Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kazuna
| family name = Takashiro
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}.
{{cartagra characters|state=collapsed}}
{{kns characters}}
0d5a5be1fcf59c5cca50f6290d3ec95ce73001b8
903
887
2023-06-10T23:52:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kazuna
| family name = Takashiro
| jname =
| image =
<tabber>
|-| Adult =
[[File:skaz0101a.png|x300px]]
|-| Teenager =
[[File:kad100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}.
{{cartagra characters|state=collapsed}}
{{kns characters}}
ceb9b75430a4ac5457b475ba7746ac962a1deb12
905
903
2023-06-10T23:56:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kazuna
| family name = Takashiro
| jname =
| image =
<tabber>
|-| Adult = [[File:skaz0101a.png|x300px]]
|-| Teenager = [[File:kad100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}.
{{cartagra characters|state=collapsed}}
{{kns characters}}
9c2f48026378558956d6d8983131f6f2afe3311e
906
905
2023-06-11T00:31:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kazuna
| family name = Takashiro
| jname = 高城 和菜
| image =
<tabber>
|-| Adult = [[File:skaz0101a.png|x300px]]
|-| Teenager = [[File:kad100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}{{nihongo|'''{{c}}'''|高城 和菜}} (née {{nihongo|'''Kozuki'''|小月}}) is a famous actress and the wife of {{n|Shugo|Takashiro}}.
{{cartagra characters|state=collapsed}}
{{kns characters}}
959f9062bc7f05e8c42ff550ac66593177cee69d
909
906
2023-06-11T00:33:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kazuna
| family name = Takashiro
| jname = 高城 和菜
| image =
<tabber>
|-| Adult = [[File:skaz0101a.png|x300px]]
|-| Teenager = [[File:kad100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' (née '''Kozuki''') is a famous actress and the wife of {{n|Shugo|Takashiro}}.
{{cartagra characters|state=collapsed}}
{{kns characters}}
c55e4ff28f96373bc83a51eb686017f211e73111
Stella
0
293
884
2023-06-09T16:35:53Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years."
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:|x300px]]
| aka =
| gender =
| age =
| appearance =
| seiyu =
}}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years.
4d34c5f74821429254a0c10fa08bc783373fdaf7
885
884
2023-06-09T16:37:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:|x300px]]
| aka =
| gender =
| age =
| appearance =
| seiyu =
}}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years.
{{kns characters}}
7d93eea99f5270f42d4b2daa9c5360249f280a9f
886
885
2023-06-09T16:38:06Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years.
{{kns characters}}
2410d8ae63d1d4f9e6355d127189ca52e2ed0e69
889
886
2023-06-09T16:53:20Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years.
== Relationships ==
{{kns characters}}
4f771e7bd6250254901a59633b0570e7690232c7
MediaWiki:Common.js
8
294
888
2023-06-09T16:48:00Z
Otonashi Ayana
2
Created page with "importScript("User:Daduxing/familytree.js");"
javascript
text/javascript
importScript("User:Daduxing/familytree.js");
ed4ca8bf5aee4324a4bff27b38ff4bf4dc22e7b4
MediaWiki:Common.css
8
7
890
859
2023-06-09T19:13:04Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
fa490c5a035532d2a9941a592b33cd7780364846
891
890
2023-06-09T19:16:38Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.charbox .name{
pointer-events:none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
b97cf25118d17d912459af3a4e170bed593c07a1
899
891
2023-06-10T23:40:18Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
03bb289597af9742848b77e8079ce53a3b30bf45
902
899
2023-06-10T23:52:31Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
75646bc8de95276c869f0488a96ec087a803a556
904
902
2023-06-10T23:56:20Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
bd74eafd6ee27601aef52cf74e3002203d67b5a1
Cartagra
0
194
892
772
2023-06-09T19:29:30Z
Otonashi Ayana
2
/* Premise */
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
}}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series.
== Premise ==
In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in an investigation into the string of bizarre murders that are plaguing Ueno.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
[[Category:Cartagra]]
368b4bbdc57188bd5db999b1fbc0be49ad088a22
Blessed Congregation
0
295
897
2023-06-10T23:16:06Z
Otonashi Ayana
2
Created page with "The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. === Known Members === {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}"
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
=== Known Members ===
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
448aa23fe7e040538e877528af771e167209a57b
914
897
2023-06-11T00:47:38Z
Otonashi Ayana
2
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
=== Congregation of the Blessed ===
The cult was first founded by {{n|Keigo|Utsugi}}.
=== Senri ===
=== Blessed Congregation ===
=== Known Members ===
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
5fd06964c74f71e213faf24e32d40b0a4b8b8535
File:Skaz0101a.png
6
296
900
2023-06-10T23:40:41Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Kad100a.png
6
297
901
2023-06-10T23:43:28Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Shugo Takashiro
0
62
907
676
2023-06-11T00:32:26Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname = 高城 秋五
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}{{nihongo|'''{{c}}'''|高城 秋五}} is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
<div class="tree-fade">
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | ! | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
</div>
{{cartagra characters}}
{{kns characters|state=collapsed}}
1779a8e6d4ba80e77c13b6ee3affaca7feca14cf
908
907
2023-06-11T00:32:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname = 高城 秋五
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
<div class="tree-fade">
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | ! | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
</div>
{{cartagra characters}}
{{kns characters|state=collapsed}}
51f3ecc46ff30c8b819180308eed0b16f89979cd
911
908
2023-06-11T00:36:39Z
Otonashi Ayana
2
/* Relationships */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname = 高城 秋五
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
<div class="tree-fade">
{{:Shugo Takashiro/Family tree}}
</div>
{{cartagra characters}}
{{kns characters|state=collapsed}}
0142cecbd45dbbbe2e642a28b1b8aff6cf464f7f
Shugo Takashiro/Family tree
0
298
910
2023-06-11T00:35:36Z
Otonashi Ayana
2
Created page with "{{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}}"
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | ! | | | | |}}
{{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}}
{{Tree chart| Nat | | Shg | - | Kzn | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
26865521064a6ed0141d5195c275acad83e1552e
Senri
0
299
912
2023-06-11T00:46:20Z
Otonashi Ayana
2
Redirected page to [[Blessed Congregation]]
wikitext
text/x-wiki
#REDIRECT [[Blessed Congregation]]
9c135e78b8ec3b8e435cdae46415c161ce44f627
Congregation of the Blessed
0
300
913
2023-06-11T00:46:45Z
Otonashi Ayana
2
Redirected page to [[Blessed Congregation]]
wikitext
text/x-wiki
#REDIRECT [[Blessed Congregation]]
9c135e78b8ec3b8e435cdae46415c161ce44f627
Blessed Congregation
0
295
915
914
2023-06-11T00:48:38Z
Otonashi Ayana
2
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
=== Congregation of the Blessed ===
The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}.
=== Senri ===
=== Blessed Congregation ===
=== Known Members ===
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
bcb3b0241ad1d5bdba3c4e3c8a90475c1b227680
916
915
2023-06-11T00:50:26Z
Otonashi Ayana
2
/* Senri */
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
=== Congregation of the Blessed ===
The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}.
=== Senri ===
After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction.
=== Blessed Congregation ===
=== Known Members ===
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
a09d6991a89d8a103cd5384454a8aa0f02ac35e5
File:Sayu0101a.png
6
301
917
2023-06-11T00:57:09Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Ayumu Sato
0
302
918
2023-06-11T00:57:47Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }} == Trivia == *Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}. {{kns characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Ayumu
| family name = Sato
| jname =
| image = [[File:sayu0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}
== Trivia ==
*Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}.
{{kns characters}}
72f4e07418024ee56f19a704591b18fbd2c0016d
919
918
2023-06-11T00:58:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Ayumu
| family name = Sato
| jname =
| image = [[File:sayu0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a student at [[Ouba Girls' Private Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}.
== Trivia ==
*Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}.
{{kns characters}}
7076cbe6f225f2f8f4b666f6048334986d46f996
920
919
2023-06-11T00:59:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Ayumu
| family name = Sato
| jname =
| image = [[File:sayu0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}.
== Trivia ==
*Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}.
{{kns characters}}
707bafacf775bfc8e2557de1768774245235017f
Help:Character page
12
303
921
2023-06-11T01:00:28Z
Otonashi Ayana
2
Created page with "{{Template:Infobox character/doc}}"
wikitext
text/x-wiki
{{Template:Infobox character/doc}}
d0a7f919655fe112cf6b6268beea94e153912ce6
935
921
2023-06-11T03:11:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Template:Infobox character/doc}}
<pre>
== Relationships ==
<div class="tree-fade">
{{:{{PAGENAME}}/Family tree}}
</div>
</pre>
fee553fd4e53d3c5ff9337cc14d5527a5cffc894
941
935
2023-06-11T03:16:28Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Template:Infobox character/doc}}
<pre>
== Relationships ==
{{family tree}}
</pre>
d11c8bb3564ca0d1a0de2b35e09b8abbff4a54c3
Masaki Tomoyuki
0
304
922
2023-06-11T01:04:14Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:|x300px]] | aka = {{o|Ayato|Hinagami}} | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant. == Trivia == * Masaki is notably tall, described as..."
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:|x300px]]
| aka = {{o|Ayato|Hinagami}}
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
ea6cda803a6c42f058e92eb5d44cbe6714a521b5
923
922
2023-06-11T01:31:34Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:|x300px]]
| aka = {{o|Ayato|Hinagami}}
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant.
== Plot ==
Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
563b9cbde3e3229e4a83897f4a26e2d9b932dd97
Reiji Tokisaka
0
42
924
858
2023-06-11T01:41:54Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of {{kns}}.
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
5e7821f6f407993ce3cf5db3803c911d5d60a079
925
924
2023-06-11T01:42:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy.
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
ea0f5e50585e2884e27aab645dc393127ebd69a8
926
925
2023-06-11T01:42:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]]
| relations = {{plainlist|
* [[Yukari Tokisaka]] (sister)
* [[Toko Kuchiki]] (love interest)
}}
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy.
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
6352c07ebb71db39ebbe5074fe92dab7a48b6ab3
927
926
2023-06-11T01:51:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]]
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy.
== Trivia ==
* In the original release of {{kns/nl}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
e13e53dba27af404a21da05a20447b1b158cdba5
929
927
2023-06-11T01:53:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]]
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy.
== Trivia ==
* In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
55f6b8ee55f601b6e28a0cb77853536b0777a734
Template:Kns
10
43
928
661
2023-06-11T01:52:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#if:{{{1|}}}|Kara no Shōjo|''[[Kara no Shoujo|Kara no Shōjo]]''}}
825b6a825a417e39b90bd5493ad3df0de6c68fb0
930
928
2023-06-11T01:53:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#if:{{{1|}}}|''Kara no Shōjo''|''[[Kara no Shoujo|Kara no Shōjo]]''}}
e3617a3f9561f10d6b432a2ae587d3500d4fe1ab
Template:Kns characters
10
138
931
665
2023-06-11T01:54:27Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
{{kns/cat}}
[[Category:Characters]]
</includeonly>
0ec719608337e824e30502cd69b82f191cfc83fc
Natsume Takashiro
0
305
932
2023-06-11T03:09:25Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and she is the older sister of {{n|Shugo|Takashiro}}. {{kns characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Natsume
| family name = Takashiro
| jname =
| image = [[File:|x300px]]
| aka =
| gender =
| age =
| appearance =
| seiyu =
}}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and she is the older sister of {{n|Shugo|Takashiro}}.
{{kns characters}}
42def5081ec0cc59bd21ab105beba6913aaeb2bd
933
932
2023-06-11T03:10:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Natsume
| family name = Takashiro
| jname =
| image = [[File:snat0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and she is the older sister of {{n|Shugo|Takashiro}}.
{{kns characters}}
df143bdedac2034e39754531420d8eb0fae15229
934
933
2023-06-11T03:10:24Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Natsume
| family name = Takashiro
| jname =
| image = [[File:snat0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}.
{{kns characters}}
8072998a520e28dd3fc00c364dde2f8a9a5daa93
936
934
2023-06-11T03:11:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Natsume
| family name = Takashiro
| jname =
| image = [[File:snat0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}.
== Relationships ==
<div class="tree-fade">
{{:{{PAGENAME}}/Family tree}}
</div>
{{kns characters}}
3f44b5b62bce8f8798db398af6d22ea0d8adc180
940
936
2023-06-11T03:16:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Natsume
| family name = Takashiro
| jname =
| image = [[File:snat0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}.
== Relationships ==
{{family tree}}
{{kns characters}}
305a3865bf196c99489d622de74f119f70a48a03
Shugo Takashiro
0
62
937
911
2023-06-11T03:12:13Z
Otonashi Ayana
2
/* Relationships */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname = 高城 秋五
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
<div class="tree-fade">
{{:{{PAGENAME}}/Family tree}}
</div>
{{cartagra characters}}
{{kns characters|state=collapsed}}
24e00f59d73545929ca3547400208c8ffa1ac95b
942
937
2023-06-11T03:16:39Z
Otonashi Ayana
2
/* Relationships */
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname = 高城 秋五
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Relationships ==
{{family tree}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
352a3a36f8d5b72dac8cc348f7bf3290ba48f144
Natsume Takashiro/Family tree
0
306
938
2023-06-11T03:15:11Z
Otonashi Ayana
2
Created page with "{{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | }} {{Tree chart| | ,|- | -|- |+|-|-| . }} {{Tree chart| Nat | | Shg | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}}"
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | ! | | | }}
{{Tree chart| | ,|- | -|- |+|-|-| . }}
{{Tree chart| Nat | | Shg | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
bde348a5b93984717991c8d9f26d8e19688ea839
943
938
2023-06-11T03:17:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | ! | | | }}
{{Tree chart| | ,|- | -|- |+|-|-| . }}
{{Tree chart| Nat | | Shg | | Nna
|Nat={{charbox|Natsume|119px}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
540b8938aad0b73b5587fbd17a1c459abc352cda
944
943
2023-06-11T03:18:28Z
Otonashi Ayana
2
Undo revision 943 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]])
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | ! | | | }}
{{Tree chart| | ,|- | -|- |+|-|-| . }}
{{Tree chart| Nat | | Shg | | Nna
|Nat={{charbox|Natsume|119px|link=Natsume Takashiro}}
|Shg={{charbox|Shugo|119px|link=Shugo Takashiro}}
|Nna={{charbox|Nana|119px|link=Nana Takashiro}}}}
{{Tree chart/end}}
bde348a5b93984717991c8d9f26d8e19688ea839
Template:Family tree
10
307
939
2023-06-11T03:16:03Z
Otonashi Ayana
2
Created page with "<div class="tree-fade"> {{:{{PAGENAME}}/Family tree}} </div>"
wikitext
text/x-wiki
<div class="tree-fade">
{{:{{PAGENAME}}/Family tree}}
</div>
56ae805eeb348a1e1f05a92ebae4e5656f2c99f0
File:Nan100a.png
6
308
945
2023-06-11T03:20:05Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Nana Takashiro
0
309
946
2023-06-11T03:20:16Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Nana | family name = Takashiro | jname = | image = [[File:nan100a.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}."
wikitext
text/x-wiki
{{infobox character
| given name = Nana
| family name = Takashiro
| jname =
| image = [[File:nan100a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}.
aaa21a9614e528acc82df159de3227f5c9b5980c
947
946
2023-06-11T03:20:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Nana
| family name = Takashiro
| jname =
| image = [[File:nan100a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}.
{{cartagra characters}}
dac12e26ba6ed5fbe4646f80e55ea6d6705875a9
951
947
2023-06-11T03:34:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Nana
| family name = Takashiro
| jname =
| image = [[File:nan100a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}.
== Trivia ==
*Nana only appears in {{cartagra}}, though she is mentioned in the later {{kns}} titles.
{{cartagra characters}}
3826f0eb6e7401cc6f93c972f46eadb0d010e61a
File:Ssta0101a.png
6
310
948
2023-06-11T03:22:02Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Stella
0
293
949
889
2023-06-11T03:22:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:ssta0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years.
== Relationships ==
{{kns characters}}
f669b6a2d955fd65e33b5c44b4ffcf46056ad12d
950
949
2023-06-11T03:23:12Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:ssta0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years.
== Relationships ==
{{kns characters}}
2677a46ae6d84a979c4e262d3a8a190d4c65e265
Help:Manual of Style
12
311
952
2023-06-11T03:36:52Z
Otonashi Ayana
2
Created page with "== Infoboxes == Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images. *Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}."
wikitext
text/x-wiki
== Infoboxes ==
Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images.
*Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}.
c12262e33fe739f5c4226b93a06f1bb0682d0d9a
953
952
2023-06-11T03:39:48Z
Otonashi Ayana
2
wikitext
text/x-wiki
Pages on characters who appear in any of the {{kns|n}} titles should be written with the assumption that the events of ''Cartagra'' are past events.
== Infoboxes ==
Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images.
*Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}.
e5d42dca3cbec5a3fa331b6d828680d5134ac1c1
954
953
2023-06-11T03:40:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
== General ==
Pages on characters who appear in any of the {{kns|n}} titles should be written with the assumption that the events of ''Cartagra'' are past events.
== Infoboxes ==
Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images.
*Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}.
853a33cdf5a235c2e79f1300a74a8aa3583e8a33
955
954
2023-06-11T03:41:24Z
Otonashi Ayana
2
wikitext
text/x-wiki
== General ==
Pages on characters who appear in any of the {{kns|n}} titles should be written with the assumption that the events of ''Cartagra'' are past events.
*Example: {{n|Kazuna|Takashiro}}'s page is written from the perspective of her already having married {{o|Shugo|Takashiro}}.
== Infoboxes ==
Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images.
*Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}.
5e60bab16a71cd34aa68ace1eb6ff15678b1ab80
Template:Spoiler
10
64
957
898
2023-06-11T05:50:09Z
Otonashi Ayana
2
Replaced content with "<templatestyles src="Spoiler/styles.css" /> {{spoiler/template}}"
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{spoiler/template}}
818e3f05e4590806301c4099ab9843cbbbb82419
958
957
2023-06-11T05:50:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{Template:Spoiler/template}}
54f187ccc6f330c1fffcda6c6955223b5d06379a
959
958
2023-06-11T05:52:15Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{Spoiler/template|{{{1}}}|{{{bullet|}}} }}
e606dd5560f00fc04ae0af9e37c9db2cba50248f
960
959
2023-06-11T05:53:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{Spoiler/template|{{{1}}}|{{{2}}}|{{{bullet|}}} }}
b6f6d51f725cbfa58487d56bb4de2617abffdc17
961
960
2023-06-11T05:55:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#ifeq:{{{bullet|}}}|yes|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span>
| kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span>
| kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span>
| kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
025c0d9236e595a1ce1cbb486e5a9a29f560dcd8
Template:Kns2 characters
10
313
962
2023-06-11T08:44:41Z
Otonashi Ayana
2
Created page with "{{Navbox | name = kns characters | title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sat..."
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Masaki|Tomoyuki}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
* {{n|Naori|Kuroya}}
* {{n|Ayato|Hinagami}}
* {{n|Karen|Hinagami}}
* {{n|Yu|Futami}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Nanako|Sawashiro}}
* [[Satsuki]]
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* {{n|Yuzuru|Kuroya}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Saizo|Kuki}}
* {{n|So|Kuroya}}
* {{n|Yoshie|Futami}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
}}
<includeonly>
{{kns/cat}}
[[Category:Characters]]
</includeonly>
56b767ad0cbe880c16ae1fc84c7c9df2107029f4
Fuyumi Kayahara
0
314
963
2023-06-11T08:47:42Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:|x300px]] | aka = {{spoiler|kns2|Ayako}} | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''Ayako''', is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to..."
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:|x300px]]
| aka = {{spoiler|kns2|Ayako}}
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''Ayako''', is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double.}}
{{kns2 characters}}
83ac3bdd445b80520fe601473e3d9ee996806e53
964
963
2023-06-11T08:48:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''Ayako''', is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double.}}
{{kns2 characters}}
ad7f3ada804bb7af226215eebd688ed1fe3996c5
965
964
2023-06-11T08:48:55Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double.}}
{{kns2 characters}}
8c03129af55d52c9a8f3e555b4b08f3fede6a5d2
Satsuki
0
315
966
2023-06-11T08:52:35Z
Otonashi Ayana
2
Created page with "{{infobox character | name = Satsuki | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is an enigmatic girl in the [[Hitogata]] settlement. {{kns2 characters}}"
wikitext
text/x-wiki
{{infobox character
| name = Satsuki
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is an enigmatic girl in the [[Hitogata]] settlement.
{{kns2 characters}}
0ea712f7b0ba94f05b52d3a76508054f78f1e062
967
966
2023-06-11T08:52:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name = Satsuki
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''Satsuki''' is an enigmatic girl in the [[Hitogata]] settlement.
{{kns2 characters}}
ce8ceca40b7705356e831877ff7569badd7a9fef
Template:Kns characters
10
138
968
931
2023-06-11T09:48:03Z
47.4.58.254
0
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group3 = Faculty
| list3 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
| group4 = Hospital Staff
| list4 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| list5 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
{{kns2/cat}}
[[Category:Characters]]
</includeonly>
4ac69d82b44e9847367193dffcbafda96a637b07
979
968
2023-06-11T16:08:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Ouba Private Girls' Academy
| list2 =
{{Navbox|child
| group1 = Students
| list1 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group2 = Faculty
| list2 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
}}
| group3 = Hospital Staff
| list3 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| group4 = Other
| list4 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
{{kns2/cat}}
[[Category:Characters]]
</includeonly>
10fdc3f676d2fd82e48cce151467b1fe7f3e1a1a
981
979
2023-06-11T16:10:00Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Ouba Private Girls' Academy
| list2 =
{{Navbox|child
| group1 = Students
| list1 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group2 = Faculty
| list2 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
}}
| group3 = Hospital Staff
| list3 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| group4 = Other
| list4 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
{{kns/cat}}
[[Category:Characters]]
</includeonly>
b402b71e68faebefa16a05712f4a08167d9a8305
987
981
2023-06-11T16:15:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Ouba Private Girls' Academy
| list2 =
{{Navbox|child
| group1 = Students
| list1 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group2 = Faculty
| list2 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
}}
| group3 = Hospital Staff
| list3 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| group4 = Other
| list4 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Characters]]
{{kns/cat}}
</includeonly>
4c3915f3a563666970503f1d8dc8ef8f0d5a71ec
988
987
2023-06-11T16:16:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = [[Ouba Private Girls' Academy|<span style="color:#202122; font-style:italic">Ouba Academy</span>]]
| list2 =
{{Navbox|child
| group1 = Students
| list1 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group2 = Faculty
| list2 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
}}
| group3 = Hospital Staff
| list3 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| group4 = Other
| list4 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Characters]]
{{kns/cat}}
</includeonly>
9e7b02cbe13dc1e679aa050ca6f4918e9d08f79c
989
988
2023-06-11T16:18:47Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = [[Ouba Private Girls' Academy|<span style="color:#202122">Ouba Academy</span>]]
| list2 =
{{Navbox|child
| group1 = Students
| list1 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group2 = Faculty
| list2 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
}}
| group3 = Hospital Staff
| list3 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| group4 = Other
| list4 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Shin|Katsuragi}}
}}
<includeonly>
[[Category:Characters]]
{{kns/cat}}
</includeonly>
5e76435cf878e168d863e530dd1c98b9357982c8
Template:Kns2/cat
10
316
969
2023-06-11T09:48:54Z
Otonashi Ayana
2
Created page with "<includeonly>[[Category:Kara no Shōjo 2]]</includeonly>"
wikitext
text/x-wiki
<includeonly>[[Category:Kara no Shōjo 2]]</includeonly>
ca304f1bf3f53a8369616ff54c9c776bfc883a6e
Template:Spoiler
10
64
970
961
2023-06-11T09:50:44Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#ifeq:{{{bullet|}}}|yes|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span>
| kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span>
| kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span>
| kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
ebe25e036c8e5cc738164829454e4bb61e354353
971
970
2023-06-11T09:52:30Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />
{{#ifeq:{{{bullet|}}}|yes|
{{#switch: {{{1}}}
| cartagra =<span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span>
| kns =<span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span>
| kns2 =<span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span>
| kns3 =<span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span>
}}
|
{{#switch: {{{1}}}
| cartagra =<span class="spoiler-cartagra">{{{2}}}</span>
| kns =<span class="spoiler-kns">{{{2}}}</span>
| kns2 =<span class="spoiler-kns2">{{{2}}}</span>
| kns3 =<span class="spoiler-kns3">{{{2}}}</span>
}}
}}
1e981cd03bd0086b9714382a8ad994b23bf416da
972
971
2023-06-11T09:53:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Spoiler/styles.css" />{{#ifeq:{{{bullet|}}}|yes|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span>
| kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span>
| kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span>
| kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span>
}}
|
{{#switch: {{{1}}}
| cartagra = <span class="spoiler-cartagra">{{{2}}}</span>
| kns = <span class="spoiler-kns">{{{2}}}</span>
| kns2 = <span class="spoiler-kns2">{{{2}}}</span>
| kns3 = <span class="spoiler-kns3">{{{2}}}</span>
}}
}}
1040c08c4fb78934239a82c0d14185b0cbb95efd
Template:Kns2 characters
10
313
973
962
2023-06-11T15:47:18Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Masaki|Tomoyuki}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* {{n|Ayato|Hinagami}}
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
}}
<includeonly>
{{kns/cat}}
[[Category:Characters]]
</includeonly>
f6178ae2b2c6900019dc02893069d0ad8052f30e
982
973
2023-06-11T16:10:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Masaki|Tomoyuki}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* {{n|Ayato|Hinagami}}
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
}}
<includeonly>
{{kns2/cat}}
[[Category:Characters]]
</includeonly>
4e9f675ca2056444a176bab82b6ecb177870047b
986
982
2023-06-11T16:15:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Masaki|Tomoyuki}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* {{n|Ayato|Hinagami}}
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
2f62db3d412b255a058ad67c1f3bbcdd2b931fe8
990
986
2023-06-11T16:25:04Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Masaki|Tomoyuki}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
91858279bd0adb0527bcc0c999bc35ca8c0575b9
997
990
2023-06-11T17:18:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Masaki|Tomoyuki}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
40ea54d9a0b9c87e2c2b269d0c361a5859869a5c
Kara no Shoujo
0
181
974
774
2023-06-11T15:57:14Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
5146c9c018c2e6b17bda580e8d33df30e44741ac
999
974
2023-06-11T17:52:10Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets.
== Trivia ==
*{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. The work also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
d5ea054b2af1d3abaad4919bfd5b805bac441cc4
Kara no Shoujo - The Second Episode
0
182
975
527
2023-06-11T16:02:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo 2.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
}}
{{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
73726d992c9d23895a0233aa4a4759731a27559c
976
975
2023-06-11T16:03:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
}}
{{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
75857f580ddd7e3f0df15c72f3d4ca496ca14f4e
977
976
2023-06-11T16:05:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.jpg|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
}}
{{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
5754dfe9dfee5250595dd39090e783ae2d3f7044
1001
977
2023-06-11T17:54:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.jpg|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
}}
{{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Characters ==
== Trivia ==
*{{kns2|n}} is heavily inspired by Dante's [[w:Purgatorio|Purgatorio]], with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
0ec70653c75763bd210800d28d2ed8d7e1550b5f
1002
1001
2023-06-11T17:54:56Z
Otonashi Ayana
2
/* Trivia */
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.jpg|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
}}
{{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Characters ==
== Trivia ==
*{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
88eb4d2866c6f2427f65c96af94725b8d2a557b2
Template:Kns2
10
58
978
662
2023-06-11T16:06:26Z
Otonashi Ayana
2
wikitext
text/x-wiki
''[[Kara no Shoujo - The Second Episode|Kara no Shōjo - The Second Episode]]''
65d3eff018013da31ee1bc0933938da9b9cc9f4d
1000
978
2023-06-11T17:53:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#if:{{{1|}}}|''Kara no Shōjo - The Second Episode''|''[[Kara no Shoujo - The Second Episode|Kara no Shōjo - The Second Episode]]''}}
1ba023b869cbb5927aba4d163d49e44c13397839
Toko Kuchiki
0
273
980
783
2023-06-11T16:09:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Toko
| family name = Kuchiki
| jname =
| image = [[File:shuy0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is an enigmatic girl who attends [[Ouba Private Girls' Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens.
{{kns characters}}
66488b085e1be7dcfbc321be43bf67a42fb08123
Reiji Tokisaka
0
42
983
929
2023-06-11T16:11:40Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]]
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy.
== Trivia ==
* In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
{{kns2 characters}}
c4009f99c7f268ee46c42645cf264bede4e8a179
984
983
2023-06-11T16:12:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]]
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy.
== Trivia ==
* In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
{{kns2 characters|state=collapsed}}
f6dcd525c0b7b17fed17567591e1f137b49cd4c0
Category:Kara no Shōjo 2
14
317
985
2023-06-11T16:13:45Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Masaki Tomoyuki
0
304
991
923
2023-06-11T16:26:59Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant.
== Plot ==
Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
9f7037716f1cb82f8ca3601bf7efb9461a50ba9a
994
991
2023-06-11T16:36:56Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant.
== Plot ==
Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
fe1547fbdb97a81ef064284240ec4d35b2a2f7f8
995
994
2023-06-11T16:37:40Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a assistant detective.
== Plot ==
Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
fbf69fa0196e3d53d6eb0f95d5cb2e50a3d4424b
1004
995
2023-06-11T19:43:30Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a assistant detective.
== Plot ==
Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
f43fa325bb0b09382a41ded86011f55cc2297061
1005
1004
2023-06-11T19:43:50Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
c780e237a8d0344319ec56c1bd8705f5c21d8a6d
1006
1005
2023-06-11T19:46:44Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
61bd72fc76a0bcc17ea7b1b9279201ce46a699d7
1007
1006
2023-06-11T19:49:13Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
d9a868d2affb924e66d8e9ec76977582933b3b54
File:Tom0101.png
6
318
992
2023-06-11T16:31:50Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
993
992
2023-06-11T16:35:21Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Tom0101.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Ayumu Sato
0
302
996
920
2023-06-11T17:01:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Ayumu
| family name = Sato
| jname =
| image = [[File:sayu0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}.
== Trivia ==
*Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}.
{{kns characters}}
{{kns2 characters|state=collapsed}}
cc5bf479e46b64ee854fbef867af0eb3d276cf57
Template:Main Page
10
180
998
526
2023-06-11T17:48:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />This is a wiki dedicated to '''{{kns|n}}''', a trilogy of visual novels developed by Innocent Grey. Each title follows a strange set of murders taking place in 1950s Japan.
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png|link=Cartagra]]
<div class="item-title">
Cartagra
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png|link=Kara no Shoujo]]
<div class="item-title">
Kara no Shōjo
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]]
<div class="item-title">
Kara no Shōjo<br>The Second Episode
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]]
<div class="item-title">
Kara no Shōjo<br>The Last Episode
</div>
</div>
</div>
5038ddf5fac763f6f018d9e4cf2aafb6d3015e10
Kara no Shoujo - The Second Episode/Endings
0
319
1003
2023-06-11T19:27:48Z
Otonashi Ayana
2
Created page with "{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''/Endings}} {{kns2}} has eleven possible endings. == Bad Ends == ==== Ending #1: Hinna-sama's Curse ==== If Reiji does not connect the murders to {{o|Ayato|Hinagami}}'s marriage candidates while in Hitogata, he will be drugged and murdered by the villagers of Hitogata. ==== Ending #2: To search for Toko... ==== On January 1, 1958, if Reiji decides to abandon the Hitogata case in favor of continuing his search for {..."
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''/Endings}}
{{kns2}} has eleven possible endings.
== Bad Ends ==
==== Ending #1: Hinna-sama's Curse ====
If Reiji does not connect the murders to {{o|Ayato|Hinagami}}'s marriage candidates while in Hitogata, he will be drugged and murdered by the villagers of Hitogata.
==== Ending #2: To search for Toko... ====
On January 1, 1958, if Reiji decides to abandon the Hitogata case in favor of continuing his search for {{o|Toko|Kuchiki}} and {{o|Shinji|Mamiya}}, the game will end after Reiji leaves his house.
'''Note:''' this ending, along with Ending #8, is required to unlock the True End and the Obsession End.
==== Ending #3: The Holy Prophet ====
If Reiji has not spent time with {{o|Yukiko|Kayahara}} at least three times prior to January 9, 1958, the game will end after Yukiko assumes the role of the Blessed Congregation's Holy Prophet.
==== Ending #4: Disappearance ====
On January 12, 1958, if {{o|Masaki|Tomoyuki}} doesn't tell {{o|Yukari|Tokisaka}} that {{o|Kohane|Tori}} is in danger but still goes to Ouba Private Girls' Academy, he, {{o|Fuyumi|Kayahara}}, and {{o|Aoki|Toji}} will find {{o|Yukiko|Kayahara}}, Kohane, and the Miko inside the Academy. Masaki attacks the Miko, however Fuyumi is killed in the process and Kohane is wounded. After being unmasked, {{o|Karen|Hinagami}} commits suicide with a cyanide capsule.
In the aftermath of these events, Masaki leaves Tokyo and vanishes. Reiji loses his remaining leads on the location of {{o|Shinji|Mamiya}}, but vows to continue searching for {{o|Toko|Kuchiki}} for the rest of his life.
==== Ending #5: Yukio ====
On January 12, 1958, if {{o|Masaki|Tomoyuki}} doesn't tell {{o|Yukari|Tokisaka}} that {{o|Kohane|Tori}} is in danger AND he doesn't immediately go to Ouba Private Girls' Academy, he, {{o|Fuyumi|Kayahara}}, and {{o|Aoki|Toji}} will eventually go to the Academy and find {{o|Yukiko|Kayahara}}, Kohane, and the Miko. Kohane has been murdered and the Miko is preparing to put a clay doll inside of her corpse. Masaki attacks the Miko, however Fuyumi is killed in the process. After being unmasked, {{o|Karen|Hinagami}} commits suicide with a cyanide capsule.
In the aftermath of these events, Yukiko is traumatized and her personality regresses to that of her childhood self. While in the Kuchiki Hospital, she believes herself to be at the White Lily Garden orphanage and she regularly talks to her brother, Yukio.
==== Ending #6: Karen ====
If Reiji fails to catch the culprit in time, {{o|Kohane|Tori}} will be found dead in a classroom at Ouba Private Girls' Academy, with her body staged as the fifth victim of Hinna-sama's curse. {{o|Yukiko|Kayahara}} is found dead soon afterward, having overdosed on barbiturates. {{o|Ryoichi|Yaginuma}} is officially removed from the Hitogata investigation and his superiors close the case with Yukiko as the designated culprit. {{o|Karen|Hitogata}} visits {{o|Masaki|Tomoyuki}} and moves him into his old apartment, where he spends his days painting in a listless daze. Some time later, Reiji and {{o|Aoki|Toji}} find Masaki and ask him to convince Karen to confess to the murders, as they have deduced Karen is guilty but only have circumstantial evidence. When Masaki confronts Karen with this information, Karen commits suicide using cyanide and dies in Masaki's arms.
== Neutral End ==
==== Ending #8: Memories of That Day ====
Other than the above bad endings, this is the only possible ending of a first playthrough. Completing this ending will make the other endings available on a second playthrough.
'''Note:''' to unlock the True End or the Obsession End, the player must also complete Ending #2.
4c45bffc39383e779c67b4ebf4d80a7c349c8fe8
File:Meg0101.png
6
320
1008
2023-06-11T19:50:56Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Meguri Takamiya
0
321
1009
2023-06-11T19:51:48Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Meguri | family name = Takamiya | jname = | image = [[File:meg0101.png|x300px]] | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{kns2 characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Meguri
| family name = Takamiya
| jname =
| image = [[File:meg0101.png|x300px]]
| aka = Guriko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
{{kns2 characters}}
b6d42e07f52d673a9a0836c12042206c5b5db686
1010
1009
2023-06-11T19:53:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Meguri
| family name = Takamiya
| jname =
| image = [[File:meg0101.png|x300px]]
| aka = Guriko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.
{{kns2 characters}}
a9743adb2b97a5bb63289d6f197b93c2941c9fdb
Karen Hinagami
0
322
1011
2023-06-11T19:58:03Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders {{n|Mayu|Kamizono}}, {{n|Mizuki|Itose}}, {{n|Meguri|Takamiya}}, and {{n|Yuka|Kirimura}}. {{kns2 characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders {{n|Mayu|Kamizono}}, {{n|Mizuki|Itose}}, {{n|Meguri|Takamiya}}, and {{n|Yuka|Kirimura}}.
{{kns2 characters}}
810bca4d28b119bf8c26ce19f6f57237e815b245
1013
1011
2023-06-11T19:59:27Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders {{n|Mayu|Kamizono}}, {{n|Mizuki|Itose}}, {{n|Meguri|Takamiya}}, and {{n|Yuka|Kirimura}}.
{{kns2 characters}}
d0ee3d014665bd7c8da28f30b9dddd3abf6c72f4
File:Kar0701.png
6
323
1012
2023-06-11T19:59:13Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Saw0101.png
6
324
1014
2023-06-11T20:29:41Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Nanako Sawashiro
0
325
1015
2023-06-11T20:30:55Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Nanako | family name = Sawashiro | jname = | image = [[File:saw0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. While in Hitogata, she worked for the Kuroya clinic, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]]. {{kns2 characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Nanako
| family name = Sawashiro
| jname =
| image = [[File:saw0101.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. While in Hitogata, she worked for the Kuroya clinic, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]].
{{kns2 characters}}
5b34d51c765283d545c007463bfc62f491b67b19
Nanako Sawashiro
0
325
1016
1015
2023-06-11T20:31:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Nanako
| family name = Sawashiro
| jname =
| image = [[File:saw0101.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. She worked for the Kuroya clinic while in Hitogata, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]].
{{kns2 characters}}
f110b97fbe8ab830751719cb4495e150bbdc0ace
Template:Hitogata family tree notice
10
326
1017
2023-06-11T20:35:45Z
Otonashi Ayana
2
Created page with "This family tree is truncated for simplicity. For the complete family tree, see the [[Hinagami-Shigusa family tree]]."
wikitext
text/x-wiki
This family tree is truncated for simplicity. For the complete family tree, see the [[Hinagami-Shigusa family tree]].
5517591839a5945f21aac568394e7872a087382b
1018
1017
2023-06-11T20:36:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]].
76d52b591fa25a2469ff2e94e1cf913fa6559c38
Masaki Tomoyuki
0
304
1019
1007
2023-06-11T20:36:54Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname =
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
ec073eec03df67ff39359ee76c67aa6970d63a41
Hinagami-Shigusa family tree
0
327
1020
2023-06-12T00:30:22Z
Kinzo
4
Created page with "{{Tree chart/start}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = So}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = Mariko | Hid = Hide..."
wikitext
text/x-wiki
{{Tree chart/start}}
{{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = So}}
{{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = Mariko | Hid = Hideomi | Rio = Rioko | Ysh = Yoshimitsu }}
{{Tree chart| | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|.| | | | | | | | | | | | | | | | | Shi = Shinjiro }}
{{Tree chart| | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P| Say | | Miy |-|v|-| Ken | | Mic | | | | | | | | | | | | | | | | Ytd = Yasutada | Cst = Chisato | Ckg = Chikage | Yzr = Yuzuru | Rka = Rika | Szr = Shizuru | Say = Saya | Miy = Miya | Ken = Kensei | Mic = Michio}}
{{Tree chart| |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|T| | | | | | | | |!| | | | | | | | | | | | | | | | | | | | | | | | Yuk = Yukihito}}
{{Tree chart| Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | Nao | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy |Q| | | | | | | | Yay | | | | | | | | | | | | | | | | | | | | | | | Mar = Maris | Cel = Celes | Rok = Rokushiki | Mis = Misa | Nao = Naori | Krn = Karen | Mas = Masaki | Fuy = Ayako | Yay = Yayoi}}
{{Tree chart| | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | | | | | | | | | | | | | | |!| | | |!| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | | Shz = Shinzo | Mki = Miyuki | Chi = Chizuru | Fum = Fumiya}}
{{Tree chart| | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | |:| | | | | | | | | | | | | | | | | | | | | | | | | Sat | | |!| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | | Sat = Satsuki | Mdr = Midori | Tsb = Tsubaki | Kan = Kanae | Str = Satoru | Kei = Keiko | Bun = Bunji}}
{{Tree chart| | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | |:| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | | Shj = Shinji }}
{{Tree chart| |,|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mcr | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | | Mcr = Michiru | Khn = Kohane | May = Mayu | Mzk = Mizuki}}
{{Tree chart| Ykr | | Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykr = Yukari | Rji = Reiji | Tok = Toko}}
{{Tree chart/end}}
1051e71619afd16b8e291d3611a29cd3e96e71c0
1022
1020
2023-06-12T05:10:41Z
Kinzo
4
wikitext
text/x-wiki
{{Tree chart/start}}
{{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = So}}
{{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = Mariko | Hid = Hideomi | Rio = Rioko | Ysh = Yoshimitsu }}
{{Tree chart| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro | Ykn = Yukino | Ari = Arishima }}
{{Tree chart| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | |,|-|-|-|.| | | | | | | | | Ytd = Yasutada | Cst = Chisato | Ckg = Chikage | Yzr = Yuzuru | Rka = Rika | Szr = Shizuru | Say = Saya | Miy = Miya | Ken = Kensei | Mho = Michio }}
{{Tree chart| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister| Ori = Oribe }}
{{Tree chart| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = Maris | Cel = Celes | Rok = Rokushiki | Mis = Misa | Nao = Naori | Krn = Karen | Mas = Masaki | Fuy = Ayako | Yay = Yayoi | Tko = Tokiko}}
{{Tree chart| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = Shinzo | Mki = Miyuki | Chi = Chizuru | Fum = Fumiya}}
{{Tree chart| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | |:| | | | |S| Gnj | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Gnj = Ginji | Sat = Satsuki | Mdr = Midori | Tsb = Tsubaki | Kan = Kanae | Str = Satoru | Kei = Keiko | Bun = Bunji}}
{{Tree chart| | |,|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | |:| | | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = Kyoko | Shj = Shinji }}
{{Tree chart| | Ykr | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = Yukari | YkM = Yukiko | Rji = Reiji | Nnk = Nanako | Nao = Naori | Mcr = Michiru | Khn = Kohane | May = Mayu | Mzk = Mizuki}}
{{Tree chart| | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = Toko }}
{{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = Yukiko | Yko = Yukio}}
{{Tree chart/end}}
f67f8b8f707fbf51c7439c237d54d4a40ea7fbd4
Shugo Takashiro
0
62
1021
942
2023-06-12T00:51:54Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Shugo
| family name = Takashiro
| jname = 高城 秋五
| image = [[File:ssyu0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
}}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife.
== Plot ==
After the events of {{kns|n}}, Shugo moves to Zushi with Kazuna to raise their child.
== Relationships ==
{{family tree}}
{{cartagra characters}}
{{kns characters|state=collapsed}}
5685c30ad4dd6ee9c08b95865d28ab7c079d8f9a
File:Head Kensei.png
6
328
1023
2023-06-12T05:11:12Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Kohane.png
6
329
1024
2023-06-12T05:11:13Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Koharu.png
6
330
1025
2023-06-12T05:11:22Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Kyoko.png
6
331
1026
2023-06-12T05:11:26Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Mamiya.png
6
332
1027
2023-06-12T05:11:31Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Mariko.png
6
333
1028
2023-06-12T05:11:37Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Masaki.png
6
334
1029
2023-06-12T05:11:40Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Mayu.png
6
335
1030
2023-06-12T05:11:44Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Michiru.png
6
336
1031
2023-06-12T05:11:48Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Mio.png
6
337
1032
2023-06-12T05:11:52Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Miya.png
6
338
1033
2023-06-12T05:11:56Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Nanako.png
6
339
1034
2023-06-12T05:12:03Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Naori.png
6
340
1035
2023-06-12T05:12:07Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head natsume.png
6
341
1036
2023-06-12T05:12:12Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Oribe.png
6
342
1037
2023-06-12T05:12:16Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Reiji.png
6
343
1038
2023-06-12T05:12:19Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Rioko.png
6
344
1039
2023-06-12T05:12:22Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Rokushiki.png
6
345
1040
2023-06-12T05:12:24Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Satsuki.png
6
346
1041
2023-06-12T05:12:29Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Saya.png
6
347
1042
2023-06-12T05:12:35Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Shinzo.png
6
348
1043
2023-06-12T05:12:38Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Shizuru.png
6
349
1044
2023-06-12T05:12:42Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head shugo.png
6
350
1045
2023-06-12T05:12:45Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Sou.png
6
351
1046
2023-06-12T05:12:48Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Stella.png
6
352
1047
2023-06-12T05:12:51Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head TokoK.png
6
353
1048
2023-06-12T05:12:54Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head TokoM.png
6
354
1049
2023-06-12T05:12:56Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yaginuma.png
6
355
1050
2023-06-12T05:13:00Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yasutada.png
6
356
1051
2023-06-12T05:13:03Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yayoi.png
6
357
1052
2023-06-12T05:13:08Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yoshimitsu.png
6
358
1053
2023-06-12T05:13:11Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yu.png
6
359
1054
2023-06-12T05:13:15Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yuka.png
6
360
1055
2023-06-12T05:13:18Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yukari.png
6
361
1056
2023-06-12T05:13:21Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head YukikoM.png
6
362
1057
2023-06-12T05:13:29Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yuzuru.png
6
363
1058
2023-06-12T05:13:32Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Bunji.png
6
364
1059
2023-06-12T05:13:34Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Celes.png
6
365
1060
2023-06-12T05:13:37Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Chizuru.png
6
366
1061
2023-06-12T05:13:41Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Fumiya.png
6
367
1062
2023-06-12T05:13:44Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Fuyumi.png
6
368
1063
2023-06-12T05:13:49Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Hideomi.png
6
369
1064
2023-06-12T05:13:53Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Karen.png
6
370
1065
2023-06-12T05:13:56Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Kazuna.png
6
226
1066
669
2023-06-12T05:13:59Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Head Kazuna.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Keigo.png
6
371
1067
2023-06-12T05:14:04Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Charbox
10
219
1068
647
2023-06-12T05:14:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}|<div class="charbox">
[[File:head_{{{1}}}.png{{!}}119px|link={{{alt|}}}]]
<span class="name">{{{alt|}}}</span>
</div>
|<div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]]
<span class="name">{{{1}}}</span>
</div>
}}
ee482bf1f433113c88f4e8a0f2ab5120a4ef263a
1069
1068
2023-06-12T05:15:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}|<div class="charbox">
[[File:head_{{{1}}}.png{{!}}98px|link={{{alt|}}}]]
<span class="name">{{{alt|}}}</span>
</div>
|<div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]]
<span class="name">{{{1}}}</span>
</div>
}}
fb8461d416db07abcde8ec483941fb5353d31532
1074
1069
2023-06-12T05:43:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}|
[[File:head_{{{1}}}.png{{!}}98px|link={{{alt|}}}]]
<span class="name">{{{alt|}}}</span>
|<div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]]
<span class="name">{{{1}}}</span>
</div>
}}
49f2bf321f4c8ef32671018275c3cfb94cdbcd7d
1075
1074
2023-06-12T05:44:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}|<div class="charbox2">
[[File:head_{{{1}}}.png{{!}}98px|link={{{alt|}}}]]
<span class="name">{{{alt|}}}</span>
</div>
|<div class="charbox">
[[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]]
<span class="name">{{{1}}}</span>
</div>
}}
98360bf7163abedb802338fdeedf6c9df422bf5e
File:Head Meguri.png
6
372
1070
2023-06-12T05:16:20Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head YukikoK.png
6
373
1071
2023-06-12T05:16:22Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Arishima.png
6
374
1072
2023-06-12T05:41:34Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Tokiko.png
6
375
1073
2023-06-12T05:41:36Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Charbox/styles.css
10
223
1076
644
2023-06-12T05:45:09Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2{
position: relative;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
width: 100%;
padding: 0.25em 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox2 .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
1a5a301868f007d923092f7a8cec83b60f93bba2
1077
1076
2023-06-12T05:46:39Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
0acce3cd4923f4aca28640ca409b235778ca566b
1079
1077
2023-06-12T05:59:04Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2{
display:flex;
flex-direction:column;
}
.charbox2 .name{
width: 100%;
padding: 0.25em 0;
text-align: center;
color: white;
background-color: black;
}
d6b723be89e61c4a0e462a4f81a658bf2f3c4838
1080
1079
2023-06-12T06:09:09Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
0acce3cd4923f4aca28640ca409b235778ca566b
1095
1080
2023-06-12T12:26:37Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -2em;
display: block;
width: 100%;
}
fcfc0bd82f8471cf84e97137ebc28faf757aa28c
1098
1095
2023-06-12T12:33:43Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -2em;
display: block;
width: 100%;
background-color:white;
}
ad6bb1cbb7421174792acdcb6441b0be14bbe28e
1101
1098
2023-06-12T12:49:58Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -2em;
display: block;
width: 100%;
background-color:white;
white-space: nowrap;
}
d3ee2b452f83aeebec31ff5ec4cadf96c3d0dc3a
1102
1101
2023-06-12T12:51:41Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -23.8px;
display: block;
width: 100%;
background-color:white;
white-space: nowrap;
}
65b8f4e8bfe36c42c5b876810db8e158e6a1f60d
MediaWiki:Common.css
8
7
1078
904
2023-06-12T05:55:29Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
626699f32fea86bede530aa45c52de3a4e56f181
1093
1078
2023-06-12T12:05:53Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-2); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
26c966ff0807036e2b3ed5376788882fe106f16c
1094
1093
2023-06-12T12:06:42Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
52fea86c5fe3295dab91a074afcf3ae29bee2f9f
1097
1094
2023-06-12T12:31:17Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
a4bc90049e68cbf3a168df2c1a52c194fc73d417
1099
1097
2023-06-12T12:36:55Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 35%);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
c8a12e7bf7ed9e9e6003ffcad7b59bd95c828bea
1106
1099
2023-06-12T13:17:20Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
cf5ee1222e9350dc184b525b5c9bf14d62d7ab5e
Hinagami-Shigusa family tree
0
327
1081
1022
2023-06-12T06:18:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Hinagami}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = Mizuki Itose }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao || | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
6f11cf0fc90103c5fd582cf8921615682458de12
1082
1081
2023-06-12T06:20:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = Mizuki Itose }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
cdfc81c5cb22d8e37c80ab023805a28123573b93
1083
1082
2023-06-12T06:21:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = Mizuki Itose }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
148919b770fa8cde94aa6893b0e4644aff702bc3
1085
1083
2023-06-12T06:28:27Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbpx|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
18e7ea164c8dee42cf0609cc328f1308f6f44c87
1086
1085
2023-06-12T06:28:56Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
95f347590fd70022e196ba839c74dc76802e16d9
1087
1086
2023-06-12T06:37:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
cf0f7f8b983101702ffa78f425c04fff2923755d
1088
1087
2023-06-12T06:37:16Z
Otonashi Ayana
2
Protected "[[Hinagami-Shigusa family tree]]" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
cf0f7f8b983101702ffa78f425c04fff2923755d
1089
1088
2023-06-12T06:38:53Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
393c31f9a5ae0b093b36f11e2f1229f744d72294
1090
1089
2023-06-12T06:39:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
cf0f7f8b983101702ffa78f425c04fff2923755d
1091
1090
2023-06-12T06:51:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
652b3a059d6724978f9defa2d21b898081521f81
1100
1091
2023-06-12T12:37:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:100px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:100px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
717f883fcfcd900f389d49a48ea5c19d9dc4a1a9
1103
1100
2023-06-12T12:57:12Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
2659a525fe8b7043ead234d97b87abb6980e5caf
1104
1103
2023-06-12T13:03:30Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |-|v|-| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
a69ebd83431d07fccb35bfbb4f48ca72762eb07d
File:Head Mizuki.png
6
376
1084
2023-06-12T06:28:25Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Module:Navbox/styles.css
828
96
1092
843
2023-06-12T12:03:53Z
Otonashi Ayana
2
sanitized-css
text/css
/* {{pp|small=y}} */
.navbox {
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */
.navbox + .navbox-styles + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em;
line-height: 1.5em;
text-align: center;
}
.navbox-group {
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd;
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox-list-with-group {
text-align: left;
border-left-width: 2px;
border-left-style: solid;
}
.navbox-even {
background-color: #f7f7f7;
}
.navbox-odd {
background-color: transparent;
}
/* TODO: figure out how to remove reliance on td as structure */
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
}
a3d38174cdd09f9a5a81994a7640137e39147b98
Template:Chart top
10
206
1096
591
2023-06-12T12:29:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
{| class="tree-table collapsible {{#ifeq:{{Yesno-no|{{{collapsed|{{{collapse|}}}}}}}}|yes|collapsed|expanded}}" style="{{#switch:{{{align|}}}{{{float|}}}
| left = margin: 0.3em 1em 0.3em 0; float:left; clear:{{{clear|left}}}; min-width:{{{min-width|{{{width|33em}}}}}};
| right = margin: 0.3em 0 0.3em 1em; float:right; clear:{{{clear|right}}}; min-width:{{{min-width|{{{width|33em}}}}}};
| #default = margin: 0.3em auto auto; clear:{{{clear|none}}}; min-width:{{{min-width|{{{width|60em}}}}}};
}} width:{{{width|auto}}}; font-size:85%; border:1px solid #aaa"
! style="padding:0.2em 0.3em 0.2em {{#if:{{{template_name|}}}|0.3em|4.3em}};{{#if:{{{background|}}}|background:{{{background|}}}|background:none}}; width:{{{width|auto}}}" | {{#if:{{{template_name|}}}
|{{Navbar-collapsible|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}|{{{template_name}}}}}
|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}
}}
|-
| style="text-align:{{{text-align|center}}}" | {{#invoke:Check for unknown parameters|check|unknown=[[Category:Pages using chart top with unknown parameters|_VALUE_{{PAGENAME}}]]|preview=Page using [[Template:Chart top]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | align | background | clear | collapse | collapsed | float | min-width | template_name | text-align | title | width }}<noinclude>
|}
{{documentation}}</noinclude>
c50ecd19307d995b7d665c5ac23901984dc52786
Ayumu Sato
0
302
1105
996
2023-06-12T13:14:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Ayumu
| family name = Sato
| jname =
| image = [[File:sayu0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}.
== Trivia ==
*Ayumu is notably tall. She is described as being nearly as tall as {{n|Reiji|Tokisaka}} and her sprite art shows her as taller than most other characters.
{{kns characters}}
{{kns2 characters|state=collapsed}}
bade402a93e4c9462a5de3a35f93015b9603f089
Daisaku Arata
0
229
1107
882
2023-06-12T13:19:41Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Takoyaki vendor]] to [[Daisaku Arata]]
wikitext
text/x-wiki
{{infobox character
| name = Takoyaki vendor
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender =
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
{{cartagra characters}}
5d4586888136db7a63e770d2b4d79271eeae745f
1109
1107
2023-06-12T13:20:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Daisaku
| family name = Arata
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
{{cartagra characters}}
0ee05660130b2bbe6fc551114f4b09643bf97c85
1111
1109
2023-06-12T13:23:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Daisaku
| family name = Arata
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
== Trivia ==
*His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance.
**His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name.
{{cartagra characters}}
511a9ca3aa2678b70c73a5d62a4b175633ff4104
1112
1111
2023-06-12T13:26:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Daisaku
| family name = Arata
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
== Plot ==
In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Karen|Hinagami}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}.
== Trivia ==
*His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance.
**His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name.
{{cartagra characters}}
02249aee779530ee54af0980f6b8f2d09e08a123
1113
1112
2023-06-12T13:28:07Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Daisaku
| family name = Arata
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
== Plot ==
In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Meguri|Takamiya}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}.
== Trivia ==
*His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance.
**His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name.
{{cartagra characters}}
bce50a28fd88f9c1cb4130e9974d78d9296f38d4
Takoyaki vendor
0
377
1108
2023-06-12T13:19:41Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Takoyaki vendor]] to [[Daisaku Arata]]
wikitext
text/x-wiki
#REDIRECT [[Daisaku Arata]]
cdb2cc5c9bd29d4a1087d8a2d0da9d04eb828cc4
Template:Cartagra characters
10
201
1110
880
2023-06-12T13:20:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
* {{n|Kazuna|Kozuki}}
* {{n|Yura|Kozuki}}
* {{n|Nana|Takashiro}}
* {{n|Takako|Ayasaki}}
* {{n|Kaori|Fukamizu}}
* {{n|Tokiko|Shigusa}}
* {{n|Akao|Ikuma}}
* {{n|Daisaku|Arata}}
| group2 = Yukishiro
| list2 =
* [[Ujaku]]
* [[Rin]]
* [[Otoha]]
* [[Koyuki]]
* [[Seri]]
| group3 = Police
| list3 =
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
}}<includeonly>
[[Category:Cartagra]]
[[Category:Characters]]
</includeonly>
d1315908f26ebc456577d7ec3fae6f5aa1683e66
Karen Hinagami
0
322
1114
1013
2023-06-12T13:30:34Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother.
{{kns2 characters}}
14ff2378679ab4ad2005bd88fc7abc9f5e4386da
1115
1114
2023-06-12T13:40:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother.
== Plot ==
Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
{{kns2 characters}}
78a91291e1271877e4e2fe5698ae3f7d05f10f5d
Karen Hinagami
0
322
1116
1115
2023-06-12T13:41:49Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother.
== Plot ==
Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.
{{kns2 characters}}
c05496f8db90b8a8b88ddcb9c7e9f37254b69c02
1117
1116
2023-06-12T13:42:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.
{{kns2 characters}}
1f28d97cb9e88e33a794b94e8991f37142cbfba7
1118
1117
2023-06-12T13:43:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.
{{kns2 characters}}
f240c97085c6042a68d3af00fd33a2834bb53a32
1119
1118
2023-06-12T13:44:39Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
{{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}}
{{kns2 characters}}
ca3a2e4a3ead10eb39f5d8e39b27418eb4f25672
1120
1119
2023-06-12T13:45:25Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
{{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}}
{{kns2 characters}}
11984208921eac70b1ef76a0f61f1e2495888eba
1126
1120
2023-06-12T14:29:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
{{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
{{kns2 characters}}
063aa79864e9e69bbf451a1649c1cf1ab68c8961
1127
1126
2023-06-12T14:30:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
{{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
39ada7b5ed51a701f5d544197559fc0518fe7147
Template:Hitogata family tree notice
10
326
1121
1018
2023-06-12T13:56:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span style="font-size:smaller">This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]].</span>
88ecc375af4efd56147da486b13e41b2320c1221
1125
1121
2023-06-12T14:27:53Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div style="font-size:smaller; text-align:center">This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]].</div>
65790a0784d7c7050a9853faf1d248e5347a8cb9
1128
1125
2023-06-12T14:30:44Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div style="font-size:smaller; text-align:center; padding-top:10px">This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]].</div>
23dd7cfbba7a70411c12c4ddfef435a33dc74377
Template:Family tree/Shizuru's children
10
378
1122
2023-06-12T14:20:43Z
Kinzo
4
Created page with "{{Tree chart/start|align=center}} {{Tree chart| Yuz |P|m|P| Rik |-|-|-| Shz |P|m|P|P|P|m|P|P|P|m|P|P|P|m|P|P|P|mp | Yuz = {{charbox|Yuzuru|91px|link=Yuzuru Kuroya}} | Rik = Rika Shigusa | Shz = {{charbox|Shizuru|91px|link=Shizuru Hinagami}}}} {{Tree chart| | | | |!| | | | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | |,|-|^|-|.| | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | Krn | | Mas | | | | | | | | May | | Miz | | Meg | |..."
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| Yuz |P|m|P| Rik |-|-|-| Shz |P|m|P|P|P|m|P|P|P|m|P|P|P|m|P|P|P|mp
| Yuz = {{charbox|Yuzuru|91px|link=Yuzuru Kuroya}}
| Rik = Rika Shigusa
| Shz = {{charbox|Shizuru|91px|link=Shizuru Hinagami}}}}
{{Tree chart| | | | |!| | | | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}}
{{Tree chart| | |,|-|^|-|.| | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}}
{{Tree chart| | Krn | | Mas | | | | | | | | May | | Miz | | Meg | | Yuu | | Koh
| Krn = {{charbox|Karen|91px|link=Karen Hinagami}}
| Mas = {{charbox|Masaki|91px|link=Masaki Tomoyuki}}
| May = {{charbox|Mayu|91px|link=Mayu Kamizono}}
| Miz = {{charbox|Mizuki|91px|link=Mizuki Itose}}
| Meg = {{charbox|Meguri|91px|link=Meguri Takamiya}}
| Yuu = {{charbox|Yu|91px|link=Yu Futami}}
| Koh = {{charbox|Kohane|91px|link=Kohane Tori}}}}
{{Tree chart/end}}
99083735af26c7a8128178a83b3837bee4b6413f
1123
1122
2023-06-12T14:24:18Z
Kinzo
4
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| | | | | | | |!| | | | | | |}}
{{Tree chart| |,|-|-|-|-|-|+|-|-|-|-|-|.|}}
{{Tree chart| |!| | | | | |!| | | | | |!|}}
{{Tree chart| Yuz |P|m|P| Rik |-|-|-| Shz |P|m|P|P|P|m|P|P|P|m|P|P|P|m|P|P|P|mp
| Yuz = {{charbox|Yuzuru|91px|link=Yuzuru Kuroya}}
| Rik = Rika Hinagami
| Shz = {{charbox|Shizuru|91px|link=Shizuru Hinagami}}}}
{{Tree chart| | | | |!| | | | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}}
{{Tree chart| | |,|-|^|-|.| | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}}
{{Tree chart| | Krn | | Mas | | | | | | | | May | | Miz | | Meg | | Yuu | | Koh
| Krn = {{charbox|Karen|91px|link=Karen Hinagami}}
| Mas = {{charbox|Masaki|91px|link=Masaki Tomoyuki}}
| May = {{charbox|Mayu|91px|link=Mayu Kamizono}}
| Miz = {{charbox|Mizuki|91px|link=Mizuki Itose}}
| Meg = {{charbox|Meguri|91px|link=Meguri Takamiya}}
| Yuu = {{charbox|Yu|91px|link=Yu Futami}}
| Koh = {{charbox|Kohane|91px|link=Kohane Tori}}}}
{{Tree chart/end}}
306c82b00db0ef36a84a1c2d4d90e14fa0631852
Karen Hinagami/Family tree
0
379
1124
2023-06-12T14:24:35Z
Kinzo
4
Created page with "{{family tree/Shizuru's children}}"
wikitext
text/x-wiki
{{family tree/Shizuru's children}}
0acc07a4c7fdd7eca5ac8ec685b7dc003d529ea8
Nanako Sawashiro
0
325
1129
1016
2023-06-12T14:47:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Nanako
| family name = Sawashiro
| jname =
| image = [[File:saw0101.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. She worked for the Kuroya clinic while in Hitogata, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]].
== Plot ==
Nanako spent most of her life in the [[Hitogata]] settlement with her father, Ginji Sawashiro. She was regularly subjected to sexual abuse at her father's hands, including being forced into prostitution. She and her father eventually moved to Tokyo together, where she murdered him with the help of {{n|Naori|Kuroya}}. She began working at the [[Kuchiki Hospital]] as a part-time nurse and later took on a second job at the New Leaf Garden nursery.
{{kns2 characters}}
cdf6782e42344eab3356db9e3c1cc00d766a3cb1
Yayoi Shigusa
0
380
1130
2023-06-12T17:20:28Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Yayoi | family name = Shigusa | jname = 祠草 夜宵 | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. {{kns2 characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Yayoi
| family name = Shigusa
| jname = 祠草 夜宵
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}.
{{kns2 characters}}
1a0fbca5f7fea96cb01f8ff455f964b881581931
Yukiko Kayahara
0
381
1131
2023-06-12T17:57:28Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Yukiko | family name = Kayahara | jname = 茅原 雪子 | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of..."
wikitext
text/x-wiki
{{infobox character
| given name = Yukiko
| family name = Kayahara
| jname = 茅原 雪子
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends.
== Plot ==
Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality.
Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs {{n|Hazuki|Kyoko}} in [[Moon World]] but flees upon seeing Kyoko's blood.
A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}.
}}
{{kns2 characters}}
13aaa4ab77c083b27f9d47004888969356e8c96e
1132
1131
2023-06-12T17:57:58Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Yukiko
| family name = Kayahara
| jname = 茅原 雪子
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends.
== Plot ==
Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality.
Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs Kyoko in [[Moon World]] but flees upon seeing her blood.
A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}.
}}
{{kns2 characters}}
b0db3d7593e75a1df82ddbeff25ef0e8954f15c6
Template:Charname
10
173
1133
448
2023-06-12T18:08:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="character-name" style="display:inline-flex; text-decoration:underline"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span>
6d907342d3655bf45dc0f315f03694e8ffa2c05e
1134
1133
2023-06-12T18:09:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="character-name" style="display:inline-flex;"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span>
60fb4fba35b76db9d220ae0397b588feb49da3c7
1135
1134
2023-06-12T18:10:53Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Charname/styles.css" /><span class="character-name" style="display:inline-flex;"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span>
2de8f4fdb97e1601c2b5f24e0d1ce6017c3e365b
1137
1135
2023-06-12T18:15:42Z
Otonashi Ayana
2
wikitext
text/x-wiki
<span class="character-name" style="display:inline-flex;"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span>
60fb4fba35b76db9d220ae0397b588feb49da3c7
MediaWiki:Common.css
8
7
1138
1106
2023-06-12T18:16:01Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
10be15a7981deb71c261633d4fac2fccc659490e
MediaWiki:Tagline
8
45
1139
88
2023-06-12T19:33:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
''Click [[How to see spoilers|here]] to see spoilers''
0903a78ff1aad687bf4f968903ddf137b61a2184
1140
1139
2023-06-12T19:34:34Z
Otonashi Ayana
2
wikitext
text/x-wiki
<i>In order to see spoilers, see the Main Page</i>
b1b62dcc3a3ed315f16449ca6181c1e4607a3b99
1141
1140
2023-06-12T19:34:48Z
Otonashi Ayana
2
wikitext
text/x-wiki
In order to see spoilers, see the Main Page
6e5d77ce38b3d836471987c0eaee12e6cbebbb1a
Template:Main Page
10
180
1142
998
2023-06-12T19:36:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />This is a wiki dedicated to '''{{kns|n}}''', a trilogy of visual novels developed by Innocent Grey. Each title follows a strange set of murders taking place in 1950s Japan.
<div style="text-align:center">'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''</div>
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png|link=Cartagra]]
<div class="item-title">
Cartagra
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png|link=Kara no Shoujo]]
<div class="item-title">
Kara no Shōjo
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]]
<div class="item-title">
Kara no Shōjo<br>The Second Episode
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]]
<div class="item-title">
Kara no Shōjo<br>The Last Episode
</div>
</div>
</div>
6a12bca9139340d390542ebeb8638c2d0025953c
1143
1142
2023-06-12T19:36:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
<templatestyles src="Main Page/styles.css />This is a wiki dedicated to '''{{kns|n}}''', a trilogy of visual novels developed by Innocent Grey. Each title follows a strange set of murders taking place in 1950s Japan.
<div style="text-align:center">'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''.</div>
= Games =
<div class="main-page-carousel">
<div class="main-page-display">
[[File:cover cartagra.png|link=Cartagra]]
<div class="item-title">
Cartagra
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo.png|link=Kara no Shoujo]]
<div class="item-title">
Kara no Shōjo
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]]
<div class="item-title">
Kara no Shōjo<br>The Second Episode
</div>
</div>
<div class="main-page-display">
[[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]]
<div class="item-title">
Kara no Shōjo<br>The Last Episode
</div>
</div>
</div>
d408adf22a8f5b330e45a91f87f529ed0b70fb58
How to see spoilers
0
267
1144
768
2023-06-12T19:37:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
;In order to see spoilers on this wiki, follow these steps:
# [[Special:CreateAccount|Create an account]]
# Go to the "Gadgets" tab under your profile preferences page (''Clicking [[Special:Preferences#mw-prefsection-gadgets|'''this link''']] should take you directly there'')
# Under the "Spoilers" header, select which games you would like to see spoilers for
e7fa37de6c1b727ceff0c7463d4dfb3b26bd673f
Kara no Shoujo
0
181
1145
999
2023-06-12T19:41:15Z
Otonashi Ayana
2
/* Trivia */
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets.
== Trivia ==
*{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. ''Inferno'' also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
0a9777575b29f6cb49a2798ae73be0cc864445c7
1157
1145
2023-06-12T21:11:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets.
== Trivia ==
*{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. ''Inferno'' also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
0578c4b46073e4dbdf52e04ab78711332b9cc8f7
1161
1157
2023-06-12T21:15:41Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game
| title = Kara no Shōjo
| jtitle = 殻ノ少女
| image = [[File:Cover kara no shoujo.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:July 4, 2008
; HD Remaster
: December 12, 2009
}}
| prev = {{cartagra}}
| next = {{kns2}}
}}
{{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008.
== Premise ==
In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets.
== Trivia ==
*{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. ''Inferno'' also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns/cat}}
90b25829d80daa2cd86b4f0793e9c78143d44100
Shinji Mamiya
0
383
1146
2023-06-12T20:25:00Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]'..."
wikitext
text/x-wiki
{{infobox character
| given name = Shinji
| family name = Mamiya
| jname = マミヤ 真司
| image = [[File:|x300px]]
| aka = {{o|Shin|Katsuragi}}
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}}
== Plot ==
{{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face is partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}.
In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}.
}}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close.
Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}}
{{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}}
{{kns characters}}
5cae4d2e17472c0dfce11429c659c89cc84e1c23
1147
1146
2023-06-12T20:26:16Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Shinji
| family name = Mamiya
| jname = マミヤ 真司
| image = [[File:|x300px]]
| aka = {{o|Shin|Katsuragi}}
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}}
== Plot ==
{{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}.
In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}.
}}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close.
Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}}
{{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}}
{{kns characters}}
97bce5afcd4527a6c4034132c9768af9f6a0978f
1150
1147
2023-06-12T20:56:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Shinji
| family name = Mamiya
| jname = マミヤ 真司
| image = [[File:ssin0106a.png|x300px]]
| aka = {{o|Shin|Katsuragi}}
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}}
== Plot ==
{{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}.
In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}.
}}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close.
Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}}
{{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}}
{{kns characters}}
639fa84996aeba5c75b0359091504c0178d729f9
Template:Kns characters
10
138
1148
989
2023-06-12T20:56:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Uozumi|Kyozo}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = [[Ouba Private Girls' Academy|<span style="color:#202122">Ouba Academy</span>]]
| list2 =
{{Navbox|child
| group1 = Students
| list1 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group2 = Faculty
| list2 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
}}
| group3 = Hospital Staff
| list3 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| group4 = Other
| list4 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* [[Shinji Mamiya|{{o|Shin|Katsuragi}}]]
}}
<includeonly>
[[Category:Characters]]
{{kns/cat}}
</includeonly>
189f82670313113b7599623a080d33b690eef1cf
File:Ssin0106a.png
6
384
1149
2023-06-12T20:56:30Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Main Page/styles.css
10
179
1151
522
2023-06-12T20:58:49Z
Otonashi Ayana
2
sanitized-css
text/css
#siteSub{
display:none;
}
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
transition: transform 0.5s ease;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: x-large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
.main-page-display:hover img{
transform: scale(1.05);
}
057ea0d262f9353b4893cebc201265e3b4c736b2
1152
1151
2023-06-12T21:00:07Z
Otonashi Ayana
2
sanitized-css
text/css
#siteSub{
display:none !important;
}
.main-page-carousel{
display:flex;
flex-direction:row;
justify-content:center;
gap:1em;
padding-top: 1em;
}
.main-page-display{
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items:center;
width: 210px;
height: 315px;
border: 1px solid black;
border-radius: 21px;
overflow: hidden;
}
.main-page-display > p{
height:100%;
width:100%;
}
.main-page-display a{
display:flex;
justify-content:center;
align-items:center;
height:100%;
width:100%;
}
.main-page-display img{
max-height:100%;
width:auto;
transition: transform 0.5s ease;
}
.item-title{
position: absolute;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
opacity: 0;
text-align: center;
font-size: x-large;
color: white;
background-color: rgba(0,0,0,0.5);
transition: opacity 0.5s ease;
}
.main-page-display:hover .item-title{
opacity: 100;
}
.main-page-display:hover img{
transform: scale(1.05);
}
e43769b6cf292ef567168315edefd86a225e77cf
File:Kara no Shoujo.png
6
385
1153
2023-06-12T21:05:51Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Kara no Shoujo (painting)
0
289
1154
877
2023-06-12T21:06:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}[[File:Kara no Shoujo.png|thumb]]'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}}
{{kns|cat}}
be191800a37abd551c51c11284b5db81e1a5cbaf
1155
1154
2023-06-12T21:06:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:{{kns|n}} (painting)}}[[File:Kara no Shoujo.png|thumb]]'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}}
{{kns|cat}}
61f833c46d7b2e7110b34521cdf364d0a3a7ff88
1156
1155
2023-06-12T21:07:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:{{kns|n}} (painting)}}[[File:Kara no Shoujo.png|thumb]]'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}}
{{kns/cat}}
edb03cc1edcd082f3deda73746be63b0578d49f0
Template:Infobox game
10
224
1158
668
2023-06-12T21:14:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| header11 = Volume Chronology
| data12 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; vertical-align: top"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|"{{{prev|}}}"|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|"{{{next|}}}"|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
ae946c47055ffb33b71917f4dafda1ca2607e9eb
1159
1158
2023-06-12T21:15:06Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; vertical-align: top"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|"{{{prev|}}}"|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|"{{{next|}}}"|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
18fe040ce10e197edd9cc0af7ae8c0f0f5795587
1160
1159
2023-06-12T21:15:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; vertical-align: top"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|{{{next|}}}|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
205da25238c10ba8075fd8098406be24564b1eb8
1162
1160
2023-06-12T21:18:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: rgba(0,0,0,0.5); text-align: center; line-height: 1.4em; vertical-align: top"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|{{{next|}}}|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
faf4e4c1c0c8492186a88e66bbe98683f8f21427
1164
1162
2023-06-12T21:19:14Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: rgba(0,0,0,0.14); text-align: center; line-height: 1.4em; vertical-align: top"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|{{{next|}}}|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
389312279a3c293ff99a0f786e8877c9022ad6c3
1165
1164
2023-06-12T21:20:27Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em;"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|{{{next|}}}|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
945cbdb1c1d7d1b6422c393f0db960a2120a8e0b
1166
1165
2023-06-12T21:20:41Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; border-top: 1px solid black"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|{{{next|}}}|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
44592a8b66919baa0ee4e160825805088962e145
Kara no Shoujo - The Second Episode
0
182
1163
1002
2023-06-12T21:19:00Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.jpg|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
| prev = {{kns}}
| next = {{kns3}}
}}
{{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Characters ==
== Trivia ==
*{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
9be1f6263564aa9bc4ae12a545649494f4b8499e
Cartagra
0
194
1167
892
2023-06-12T21:21:04Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{italic title}}{{infobox game
| title = Cartagra ~Affliction of the Soul~
| jtitle = カルタグラ~ツキ狂イノ病~
| image = [[File:Cover cartagra.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* KID
* Blueberry Soft
* MangaGamer
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows, PlayStation 2
| release = {{plainlist |
* March 28, 2005
}}
| next = {{kns}}
}}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series.
== Premise ==
In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in an investigation into the string of bizarre murders that are plaguing Ueno.
== Characters ==
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
[[Category:Cartagra]]
657448849097ed13d1f12e1640eb448854c8b192
Template:Infobox game
10
224
1168
1166
2023-06-12T21:21:35Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; border-top: 1px solid rgba{0,0,0,0.14); padding-top: 10px"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|{{{next|}}}|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
b4594cd9d2fc10334642e87ad9878b2721cd25b2
1169
1168
2023-06-12T21:21:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
<includeonly>{{ infobox
| abovestyle = background:var(--theme-color);font-weight:normal;
| headerstyle = background:var(--theme-color);
| bodystyle = border-spacing:3.5px;
| above = '''''{{{title}}}'''''<br>{{{jtitle}}}
| image = {{{image|}}}
| label2 = Developer
| data2 = {{{developer|}}}
| label3 = Publisher
| data3 = {{{publisher|}}}
| label4 = Director
| data4 = {{{director|}}}
| label5 = Writer
| data5 = {{{writer|}}}
| label6 = Artist
| data6 = {{{artist|}}}
| label7 = Composer
| data7 = {{{composer|}}}
| label8 = Platform
| data8 = {{{platform|}}}
| label9 = Release
| data9 = {{{release|}}}
| label10 = Genre
| data10 = {{{genre|}}}
| data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; border-top: 1px solid rgba(0,0,0,0.14); padding-top: 10px"
{{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ← '''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|—}}
{{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next''' →<br />{{#if:{{{next|}}}|{{{next|}}}|—}}
{{!}}}
}}</includeonly>
<noinclude>{{documentation}}</noinclude>
8b1c18bdd931132698cd120cee5eaf287dfba48d
Kara no Shoujo - The Second Episode
0
182
1170
1163
2023-06-12T21:25:20Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.jpg|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
| prev = {{kns}}
| next = {{kns3}}
}}
'''''Kara no Shōjo — The Second Episode''''', originally released as {{nihongo|'''''Uro no Shōjo'''''|虚ノ少女}} and later released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Characters ==
== Trivia ==
*{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
7ba22dab203b49f671cf6a3a7b4ec37cf2e0908c
Template:Kns3/cat
10
386
1171
2023-06-12T21:29:27Z
Otonashi Ayana
2
Created page with "<includeonly>[[Category:Kara no Shōjo 3]]</includeonly>"
wikitext
text/x-wiki
<includeonly>[[Category:Kara no Shōjo 3]]</includeonly>
62e64a277b76c777c270d25502c19957f199e9c2
Kara no Shoujo - The Last Episode
0
387
1172
2023-06-12T21:29:56Z
Otonashi Ayana
2
Created page with "{{DISPLAYTITLE:''Kara no Shōjo — The Last Episode''}}{{infobox game | title = Kara no Shōjo — The Last Episode | jtitle = | image = [[File:Cover kara no shoujo 3.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = December 25, 2020 | p..."
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Last Episode''}}{{infobox game
| title = Kara no Shōjo — The Last Episode
| jtitle =
| image = [[File:Cover kara no shoujo 3.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = December 25, 2020
| prev = {{kns2}}
}}
'''''Kara no Shōjo — The Last Episode''''', originally released as {{nihongo|'''''Ama no Shōjo'''''|天ノ少女}} and later released under the title '''''The Shell Part III: Paradiso''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the final entry into the ''Kara no Shōjo'' series.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns3/cat}}
ccf2722bf6ef7178b4a652caeac97cf375ee3eff
MediaWiki:Gadget-hide-spoiler-warning
8
388
1173
2023-06-12T21:32:13Z
Otonashi Ayana
2
Created page with "Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page."
wikitext
text/x-wiki
Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page.
3e422339a4da835b69f067b752d1dbd0a78bfb76
1174
1173
2023-06-12T21:32:59Z
Otonashi Ayana
2
Otonashi Ayana moved page [[MediaWiki:Gadget-Hide spoiler warning]] to [[MediaWiki:Gadget-Hide-spoiler-warning]] without leaving a redirect
wikitext
text/x-wiki
Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page.
3e422339a4da835b69f067b752d1dbd0a78bfb76
1176
1174
2023-06-12T21:35:45Z
Otonashi Ayana
2
Otonashi Ayana moved page [[MediaWiki:Gadget-Hide-spoiler-warning]] to [[MediaWiki:Gadget-hide-spoiler-warning]] without leaving a redirect
wikitext
text/x-wiki
Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page.
3e422339a4da835b69f067b752d1dbd0a78bfb76
MediaWiki:Gadgets-definition
8
46
1175
451
2023-06-12T21:34:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
== header-general ==
* hide-spoiler-warning | hide-spoiler-warning.css
* name-order | name-order.css
== header-spoilers ==
Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game.
* cartagra | spoilers/cartagra.css
* kns1 | spoilers/kns1.css
* kns2 | spoilers/kns2.css
* kns3 | spoilers/kns3.css
e3a024ce92b5a87227c42383417a1c630fd1f53c
MediaWiki:Gadget-hide-spoiler-warning.css
8
389
1177
2023-06-12T21:36:09Z
Otonashi Ayana
2
Created page with "#siteSub{ display: none !important; }"
css
text/css
#siteSub{
display: none !important;
}
215b32feed3fffa3fb214529c25e784c3f38bcfa
MediaWiki:Gadget-section-header-general
8
390
1178
2023-06-12T21:36:36Z
Otonashi Ayana
2
Created page with "General"
wikitext
text/x-wiki
General
9239ee2cda84eca4c3440e2a7b50148af67da3d4
Masaki Tomoyuki
0
304
1179
1019
2023-06-12T21:40:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname = 智之 真崎
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|智之 真崎}}, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}}, is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
a2e2fae8c04a93f5cd6e42bb5e735a0bc0ca7212
1185
1179
2023-06-12T21:51:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname = 智之 真崎
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|智之 真崎}}, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}}, is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
{{clr|
== Relationships ==
{{family tree}}
{{hitogata family tree notice}} }}
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
cd088bfce3ca6ce00dfd227b9cdf07a510e0bbd4
1186
1185
2023-06-12T21:53:17Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname = 智之 真崎
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|智之 真崎}}, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}}, is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
28d4de794b59cc1b4db4fad70bcc104ca8ca7c4f
1215
1186
2023-06-13T04:19:17Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname = 智之 真崎
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|智之 真崎}}{{spoiler|kns2|, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}},}} is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
0d0bda66727c1087458d4c5fb4a58ee7e99e660d
Daisaku Arata
0
229
1180
1113
2023-06-12T21:46:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Daisaku
| family name = Arata
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
== Plot ==
In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Meguri|Takamiya}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}.
== Trivia ==
*His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance.
**His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name.
{{cartagra characters}}
{{kns2 characaters|state=collapsed}}
705f82ff826633f46c862adbd6e0a5f168d54b6b
1181
1180
2023-06-12T21:46:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Daisaku
| family name = Arata
| jname =
| image = [[File:tako_cartagra.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers.
== Plot ==
In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Meguri|Takamiya}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}.
== Trivia ==
*His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance.
**His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name.
{{cartagra characters}}
{{kns2 characters|state=collapsed}}
02d3b7f7272e8e2cd14cdac369276ccbd11d67e7
Template:Kns2 characters
10
313
1182
997
2023-06-12T21:47:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Masaki|Tomoyuki}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
ca9b893e23b5c88fcefc72f21c9d6a5d8fedbc3a
1187
1182
2023-06-12T21:56:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
a7f0f0a943e6ecc9410f23c38d7c3b847c173f61
Masaki Tomoyuki/Family tree
0
391
1183
2023-06-12T21:48:52Z
Otonashi Ayana
2
Created page with "{{Family tree/Shizuru's children}}"
wikitext
text/x-wiki
{{Family tree/Shizuru's children}}
fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e
Template:Clr
10
392
1184
2023-06-12T21:51:25Z
Otonashi Ayana
2
Created page with "<div style="clear:both">{{{1}}}</div>"
wikitext
text/x-wiki
<div style="clear:both">{{{1}}}</div>
63fa839ffdc9b908276ae2c797ebf41515821caa
File:Rok0101.png
6
393
1188
2023-06-12T22:06:52Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Makoto Rokushiki
0
394
1189
2023-06-12T22:15:47Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Makoto | family name = Rokushiki | jname = 六識 命 | image = [[File:rok0101.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer. == Plot == After Makoto's girlfriend, {{n|Celes|Stella}}, developed a degenerative disease..."
wikitext
text/x-wiki
{{infobox character
| given name = Makoto
| family name = Rokushiki
| jname = 六識 命
| image = [[File:rok0101.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer.
== Plot ==
After Makoto's girlfriend, {{n|Celes|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death.
His psychiatric techniques helped [[Stella]] overcome her muteness.
Makoto murdered a total of five women, among the being {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}.
3061a07dd99e29ac54a43e0d6c6f9a12de10c51f
1190
1189
2023-06-12T22:16:19Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Makoto
| family name = Rokushiki
| jname = 六識 命
| image = [[File:rok0101.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer.
== Plot ==
After Makoto's girlfriend, {{n|Celes|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death.
His psychiatric techniques helped [[Stella]] overcome her muteness.
Makoto murdered a total of five women, among the being {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}.
{{kns characters}}
{{kns2 characters|state=collapsed}}
091d80ee67a594ab461c2482444289d4c3ac5149
1197
1190
2023-06-12T23:50:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Makoto
| family name = Rokushiki
| jname = 六識 命
| image = [[File:rok0101.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer.
== Plot ==
Though primarily a psychiatrist, Makoto is an extremely talented doctor with a wide array of medical knowledge in countless fields. After World War II, he spent his time curing people on the streets, finding passion in saving others. However, he had a spiritual crisis when a pregnant prostitute asked him for an abortion, an act he disagreed with as a devout Catholic. He performed the surgery, however he fed the prostitute a poisoned drink afterwards, killing her as a form of religious revenge. In doing so, Makoto slipped into madness and came to believe it was his duty to dispense justice to those who violated the "sacred right to life." He crucified the prostitute on a cross and then murdered five more women in the same manner, all of whom were consdering abortion. Among these victims were {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}.
After Makoto's girlfriend, {{n|Celestial|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death.
Makoto was romantically involved with his sister, {{n|Misa|Rokushiki}}, however he has a testicular disease that has rendered him infertile. As such, he believes that Misa's daughter, {{n|Toko|Kuchiki}}, was a result of parthenogenesis and does not consider himself to be her father.
His psychiatric techniques helped {{n|Maris|Stella}} overcome her muteness.
== Trivia ==
* Makoto has [[w:situs inversus|situs inversus]]; if Reiji tries to shoot him in the heart at the end of {{kns}}, Makoto survives as his heart is on the opposite side of his body.
{{kns characters}}
{{kns2 characters|state=collapsed}}
26f2e46dd9975312611ffb42d4277331fb7243ae
1205
1197
2023-06-13T01:28:24Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Makoto
| family name = Rokushiki
| jname = 六識 命
| image = [[File:rok0101.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer.
== Plot ==
Though primarily a psychiatrist, Makoto is an extremely talented doctor with a wide array of medical knowledge in countless fields. After World War II, he spent his time curing people on the streets, finding passion in saving others. However, he had a spiritual crisis when a pregnant prostitute asked him for an abortion, an act he disagreed with as a devout Catholic. He performed the surgery, however he fed the prostitute a poisoned drink afterwards, killing her as a form of religious revenge. In doing so, Makoto slipped into madness and came to believe it was his duty to dispense justice to those who violated the "sacred right to life." He crucified the prostitute on a cross and then murdered five more women in the same manner, all of whom were consdering abortion. Among these victims were {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}.
After Makoto's girlfriend, {{n|Celestial|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death. Seeking some sort of penance for failing to save her, Makoto devoted his time to curing Celestial's sister, {{n|Maris|Stella}}, of her muteness.
Makoto was romantically involved with his sister, {{n|Misa|Rokushiki}}, however he has a testicular disease that has rendered him infertile. As such, he believes that Misa's daughter, {{n|Toko|Kuchiki}}, was a result of parthenogenesis and does not consider himself to be her father.
== Trivia ==
* Makoto has [[w:situs inversus|situs inversus]]; if Reiji tries to shoot him in the heart at the end of {{kns}}, Makoto survives as his heart is on the opposite side of his body.
{{kns characters}}
{{kns2 characters|state=collapsed}}
4b0b040d16c3f75d6736c5497b29b82567b4a876
Shinji Mamiya
0
383
1191
1150
2023-06-12T22:17:38Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Shinji
| family name = Mamiya
| jname = マミヤ 真司
| image = [[File:ssin0106a.png|x300px]]
| aka = {{o|Shin|Katsuragi}}
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}}
== Plot ==
{{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}.
In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}.
}}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close.
Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}}
{{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}}
== Trivia ==
* Shinji took his pen-name from {{n|Motoko|Katsuragi}}, a nun who cared for him at the [[Sisters of Benevolence]] orphanage.
{{kns characters}}
9673af440977902f9532e6c6baaacb5578d7caf6
1192
1191
2023-06-12T22:32:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Shinji
| family name = Mamiya
| jname = マミヤ 真司
| image = [[File:ssin0106a.png|x300px]]
| aka = {{o|Shin|Katsuragi}}
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}}
== Plot ==
{{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}.
In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}.
}}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close.
Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}}
{{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}}
== Trivia ==
* Shinji took his pen-name from {{n|Motoko|Katsuragi}}, a nun who cared for him at the [[Sisters of Benevolence]] orphanage.
{{kns characters}}
d24a6ec3951aef744f602466044d39fe1e6e4b3d
1208
1192
2023-06-13T02:16:25Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Shinji
| family name = Mamiya
| jname = マミヤ 真司
| image = [[File:ssin0106a.png|x300px]]
| aka = {{o|Shin|Katsuragi}}
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}}
== Plot ==
{{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later become romantically involved with his personal assistant, {{n|Misa|Rokushiki}}. As Misa was a considerably more motherly figure than Miyuki, Shinji considered Misa to be his real mother.
In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}.
}}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close.
Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}}
{{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}}
== Trivia ==
* Shinji took his pen-name from {{n|Motoko|Katsuragi}}, a nun who cared for him at the [[Sisters of Benevolence]] orphanage.
{{kns characters}}
a8179a0536c539428962340d6f4c8bf97a14acd7
Hinagami-Shigusa family tree
0
327
1193
1104
2023-06-12T22:39:40Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|.| | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }}
{{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok | | Mis |-|-|(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }}
{{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }}
{{Tree chart/end}}</div>
{{chart bottom}}
4d04248e8084e19c07f10c124cab8d6e8daac48c
1201
1193
2023-06-13T01:01:16Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }}
{{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }}
{{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }}
{{Tree chart/end}}</div>
{{chart bottom}}
4a5fb1779480c3c098af41ca982f53ed33066291
1203
1201
2023-06-13T01:11:15Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = {{charbox|Rika|alt=Rika Hinagami}} | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }}
{{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }}
{{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }}
{{Tree chart/end}}</div>
{{chart bottom}}
632782eb108bca906a79e25173ed80d57f6de908
1204
1203
2023-06-13T01:15:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = {{charbox|Rika|alt=Rika Hinagami}} | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }}
{{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }}
{{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }}
{{Tree chart/end}}</div>
{{chart bottom}}
26031d9cab8bdae332b32455db2d241e6318758f
1207
1204
2023-06-13T02:16:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{chart top|Hinagami-Shigusa family tree}}<div class="tree-width">
{{Tree chart/start}}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = {{charbox|Rika|alt=Rika Hinagami}} | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }}
{{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |S|P| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }}
{{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |G| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |Y|P| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }}
{{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }}
{{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }}
{{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }}
{{Tree chart/end}}</div>
{{chart bottom}}
cfc73d12f20bfca64ad818196fe29bac23ebfd7a
Maris Stella
0
395
1194
2023-06-12T23:31:05Z
Otonashi Ayana
2
Redirected page to [[Stella]]
wikitext
text/x-wiki
#REDIRECT [[Stella]]
5e5e2f6ec41c11a0d3fa29bdd189774679eb5bb7
Stella
0
293
1195
950
2023-06-12T23:33:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:ssta0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. She is the twin sister of {{n|Celestial|Stella}}; the two can only be differentiated by the moles near their left eye.
== Relationships ==
{{kns characters}}
c8146bec5fdb15ce46b1be152c4cbe179295558d
Reiji Tokisaka
0
42
1196
984
2023-06-12T23:48:03Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name =
| given name = Reiji
| family name = Tokisaka
| jname = 時坂玲人
| image = [[File:srei0102a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]]
}}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy.
== Plot ==
Reiji is an extremely obsessive individual and these obsessions fuel much of the story of the {{kns|n}} trilogy. After the death of his fiancée, {{n|Yukiko|Miyama}}, at the hands of {{n|Makoto|Rokushiki}} in 1950, he quits the police force to begin a single-minded pursuit of Makoto, though his drive wanes as years pass with no breakthroughs in the search. His obsessions are reignited when he meets, and eventually falls in love with, {{n|Toko|Kuchiki}}.{{spoiler|kns| Following Toko's disappearance at the end of {{kns}}, Reiji devotes the rest of his life to finding her and is repeatedly haunted by visions of her.}} Fulfilling these obsessions never brings Reiji any joy.{{spoiler|kns| Arresting Makoto at the end of {{kns|n}} leaves him angered that he couldn't avenge his fiancée.}}{{spoiler|kns2| Finding Toko's corpse at the end of {{kns2}} breaks his spirit.}}
== Trivia ==
* In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles.
{{kns characters}}
{{kns2 characters|state=collapsed}}
adeefc80c1744d1baabab6f49b2b7ce240206498
File:Head Misa.png
6
396
1198
2023-06-13T00:15:17Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Celes.png
6
365
1199
1060
2023-06-13T00:15:20Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Head Celes.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
1206
1199
2023-06-13T01:32:49Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Head Celes.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Yukio.png
6
397
1200
2023-06-13T00:59:15Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Head Rika.png
6
398
1202
2023-06-13T01:11:13Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Karen Hinagami
0
322
1209
1127
2023-06-13T02:20:16Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders a series of women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
{{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
6755a4a2745795470161f5ed5551819c4891e345
1210
1209
2023-06-13T02:28:11Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
{{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting.
Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
315026bd0a2035f3a55cc8bc5337dd9d7c936565
1211
1210
2023-06-13T03:51:46Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
{{spoiler|kns2|While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko", that is trained by the Shigusa family to carry on the village traditions. After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family.
In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting.
Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
1e8dd9191434d5f9b84e33b9763ad87b2b8f2996
1212
1211
2023-06-13T03:52:03Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko", that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family.
In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting.
Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
8fc9fd39613c07c1180d69dba09f480cb0a6e632
1213
1212
2023-06-13T03:52:47Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image = [[File:kar0701.png|x300px]]
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko" that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family.
In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting.
Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
2516435dd571e6d662d20db94c04278c2b92718e
Ayato Hinagami
0
399
1214
2023-06-13T04:18:29Z
Otonashi Ayana
2
Redirected page to [[Masaki Tomoyuki]]
wikitext
text/x-wiki
#REDIRECT [[Masaki Tomoyuki]]
2854018b5ba5fb33168180543552ea20a9941276
Template:Charbox/styles.css
10
223
1216
1102
2023-06-13T04:25:58Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
height: 0;
opacity: 0;
transition: height 1s ease, opacity 1s ease;
}
.charbox:hover .name{
height: auto;
opacity: 1;
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -23.8px;
display: block;
width: 100%;
background-color:white;
white-space: nowrap;
}
6d4649a9876a387cbb0c1c3723ba9d497369ea03
Template:Charbox/styles.css
10
223
1217
1216
2023-06-13T04:27:22Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
height: 0;
opacity: 0;
transition: height 1s ease, opacity 1s ease;
}
.charbox:hover .name{
height: 22.4px;
opacity: 1;
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -23.8px;
display: block;
width: 100%;
background-color:white;
white-space: nowrap;
}
62cb935cda93b6d415ec0ab3a17aeaec4eeae844
1218
1217
2023-06-13T04:27:54Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
height: 0;
opacity: 0;
transition: height 0.5s ease, opacity 0.5s ease;
}
.charbox:hover .name{
height: 22.4px;
opacity: 1;
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -23.8px;
display: block;
width: 100%;
background-color:white;
white-space: nowrap;
}
17138c4a2910e8bbbec74c546eb16b4c667439d8
1219
1218
2023-06-13T04:28:17Z
Otonashi Ayana
2
sanitized-css
text/css
.charbox{
position: relative;
}
.charbox > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox .name{
width: 100%;
padding: 0.25em 0;
position: absolute;
bottom: 0;
text-align: center;
color: white;
background-color: rgba(0,0,0,0.7);
height: 0;
opacity: 0;
transition: height 0.25s ease, opacity 0.25s ease;
}
.charbox:hover .name{
height: 22.4px;
opacity: 1;
}
.charbox .bg{
position: absolute;
width: 100%;
height: 100%;
background-color:lightblue;
}
.charbox2 > p{
position: relative;
display: flex;
flex-direction: column;
margin: 0;
}
.charbox2 .name{
position: absolute;
bottom: -23.8px;
display: block;
width: 100%;
background-color:white;
white-space: nowrap;
}
50530b79713f95cf7e9034ddac1f7cefa425b425
File:Bg yukiko.png
6
400
1220
2023-06-13T04:37:38Z
Otonashi Ayana
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
MediaWiki:Common.css
8
7
1221
1138
2023-06-13T04:51:21Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-page-container-inner::after{
content: '';
position: absolute;
top: 0;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.5;
z-index: -1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
effd0f10254f5f6a113a8be9ad1752eb34ce435a
1222
1221
2023-06-13T05:02:07Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-footer::before{
content: '';
position: absolute;
top: 0;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.5;
transform: scaleX(-100%);
z-index: -1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
6371e058126be1abdff2321be9778ea4a90ae845
1223
1222
2023-06-13T05:07:01Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-footer::before{
content: '';
position: absolute;
top: 0;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
dee0943cf644c5343ad06fa63abe58d16d8f3066
1224
1223
2023-06-13T05:17:44Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-table-of-contents-container::before{
content: '';
position: absolute;
top: 0;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
6de5ceb8d868918baadf430a9296072d6fe1c46b
1225
1224
2023-06-13T05:27:08Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: 0;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
249a8286d7b583b7f3a6bbf1b970a0e111425f6d
1226
1225
2023-06-13T05:34:47Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -245px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
174e3f24f9b8750134dd63c976ef7bff0e41fc81
1227
1226
2023-06-13T05:41:12Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -245px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-parser-output{
box-shadow: -21px 10px 10px white;
background-color: white;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
1e4b719aa7c90b7fcd9d492da8dfbc786453cb25
1228
1227
2023-06-13T05:43:06Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -245px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-body{
box-shadow: -21px 10px 10px white;
background-color: white;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
440a7774be1d037fa41e2bfbc29f791a53accb6d
1229
1228
2023-06-13T05:46:02Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-body{
box-shadow: -21px 10px 10px white;
background-color: white;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
edff09d867a33761a28852f089aa1bc497206c49
1230
1229
2023-06-13T05:50:57Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-parser-output{
box-shadow: -21px 21px 10px white;
background-color: white;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
5fc89a5fc67bdc966c4abe10540e8781009cc3b2
1231
1230
2023-06-13T05:57:54Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-content-container::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-body{
box-shadow: -21px 21px 10px white;
background-color: white;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
f01ec9bba40a8bfb1d3f5cc4d5189880c17aea29
1235
1231
2023-06-13T06:06:37Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-body{
box-shadow: -21px 21px 10px white;
background-color: white;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
2b9fbb6e6aa9134532d23ca1b36d7831b90dd1f3
Kara no Shoujo - The Last Episode
0
387
1232
1172
2023-06-13T06:03:36Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Kara no Shoujo: The Last Episode]] to [[Kara no Shoujo - The Last Episode]] without leaving a redirect
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Last Episode''}}{{infobox game
| title = Kara no Shōjo — The Last Episode
| jtitle =
| image = [[File:Cover kara no shoujo 3.png|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = December 25, 2020
| prev = {{kns2}}
}}
'''''Kara no Shōjo — The Last Episode''''', originally released as {{nihongo|'''''Ama no Shōjo'''''|天ノ少女}} and later released under the title '''''The Shell Part III: Paradiso''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the final entry into the ''Kara no Shōjo'' series.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns3/cat}}
ccf2722bf6ef7178b4a652caeac97cf375ee3eff
Template:Kns3
10
59
1233
663
2023-06-13T06:04:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#if:{{{1|}}}|''Kara no Shōjo - The Last Episode''|''[[Kara no Shoujo - The Last Episode|Kara no Shōjo - The Last Episode]]''}}
0ef2d8b544aeffe610bdd8f336f17c668e6b4253
Category:Kara no Shōjo 3
14
401
1234
2023-06-13T06:05:00Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Template:Pp-template
10
166
1277
384
2023-06-13T14:01:09Z
mw>Johannnes89
0
Restored revision 5060924 by [[Special:Contributions/Clump|Clump]] ([[User talk:Clump|talk]]): -crosswiki nonsense ([[:metawiki:TwinkleGlobal|TwinkleGlobal]])
wikitext
text/x-wiki
<includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}}
|*=[[Category:Pages with incorrect protection templates]]
|autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]]
|sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]]
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1046e139e5a0380698fd75d7207e9ef53a4ff91d
1278
1277
2023-06-13T18:05:19Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Pp-template]]: w
wikitext
text/x-wiki
<includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}}
|*=[[Category:Pages with incorrect protection templates]]
|autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]]
|sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]]
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1046e139e5a0380698fd75d7207e9ef53a4ff91d
MediaWiki:Sitenotice
8
402
1236
2023-06-13T17:42:33Z
Otonashi Ayana
2
Created page with "'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''"
wikitext
text/x-wiki
'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''
31c8618fa3125c4fdd1fbc2c10025f2cba4b83bf
1237
1236
2023-06-13T17:43:25Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Notice|'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''}}
fa4072a508c72dd5d16dce788b6783257add4eee
1238
1237
2023-06-13T17:45:19Z
Otonashi Ayana
2
wikitext
text/x-wiki
<div style="text-align:center">{{Notice|'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''}}</div>
311526f555fe62a31ad5d7f1760aa800da4dc371
Template:Translatable
10
403
1240
1239
2023-06-13T18:05:00Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Translatable]]: w
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}|
|{{{1|{{FULLPAGENAME}}}}}
|{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}}
|1
|{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}}
}}
}}<noinclude>
{{Documentation|content=
{{Lua|Module:String}}
<translate>
== Examples == <!--T:1-->
</translate>
* {{tlx|translatable}}
{{translatable}}
* {{tlx|translatable|2=<translate><!--T:2--> Page name</translate>}}
{{translatable|1=<translate><!--T:3--> Page name</translate>}}
* {{tlx|translatable|2=<translate><!--T:4--> Page name</translate>/{{PAGELANGUAGE}} }}
{{translatable|1=<translate><!--T:5--> Page name</translate>/{{PAGELANGUAGE}} }}
}}
[[Category:Internationalization templates{{#translation:}}]]
</noinclude>
76f8f4907f2c12144291f6adc98a40cc2cc4061f
Template:Ll
10
404
1242
1241
2023-06-13T18:05:01Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Ll]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Localized link]]
e3f7e3e940787f3cd08503ff50bc563b52242bdd
Template:Localized link
10
405
1244
1243
2023-06-13T18:05:02Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Localized_link]]: w
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><!--
-->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|<b>
}}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }}
}}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }}
}}
<!--if the translation page does not exist (or called from the source page), output as is-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{{1}}}}}
|{{PAGENAME:{{{1}}}}}
|{{{1}}}
}}
|{{{1}}}
}}
}}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|</b>
}}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude>
{{documentation|content=
{{tsh|ll|LL}}
{{High-use|35000}}
<translate>
== Purpose == <!--T:1-->
</translate>
<translate><!--T:8--> This helper template can be used to link to [[<tvar name=1>Special:LanguageStats</tvar>|translatable pages]] in the user's language.</translate>
<translate><!--T:9--> It uses the special page prefix <tvar name=1><code>Special:MyLanguage/</code></tvar>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't.</translate>
<translate>
<!--T:10-->
It should be used in translated pages, so that they link to the right page even if there is no translated page in that language.
== Usage == <!--T:2-->
</translate>
{{Localized link/doc}}
<translate>
<!--T:11-->
If "<tvar name=1><code>nsp</code></tvar>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<tvar name=1><code>nsp</code></tvar>" parameter is defined by any value — link text displays the short pagename, without namespace.
=== Examples of simple usage === <!--T:3-->
</translate>
{{(}}{{!}} class="wikitable"
{{!}}-
! <translate><!--T:4--> Use</translate>
! <translate><!--T:5--> Becomes</translate>
{{!}}-
{{!}} {{Tlx|ll|Communication}}
{{!}} {{ll|Communication}}
{{!}}-
{{!}} {{Tlx|ll|Communication|コミュニケーション}}
{{!}} {{ll|Communication|コミュニケーション}}
{{!}}-
{{!}} {{Tlx|ll|Project:About}}
{{!}} {{ll|Project:About}}
{{!}}-
{{!}} {{Tlx|ll|Project:About|nsp{{=}}0}}
{{!}} {{ll|Project:About|nsp=0}}
{{!}}{{)}}
<translate>
== Usage in translatable pages == <!--T:6-->
<!--T:12-->
On pages prepared for translation with the <tvar name=1>{{ll|Extension:Translate|nsp=0}}</tvar> extension, this template may be used in three ways.
</translate>
# <translate><!--T:13--> Should better be substitute this template, and then the wikilink target embedded in a <tvar name=1>{{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>, separately from the translatable displayed text of the link.</translate>
#: <translate><!--T:22--> As example, instead <tvar name=1><code><nowiki>{{ll|Communication|About communication}}</nowiki></code></tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}</tvar>.</translate>
# <translate><!--T:14--> Alternatively, may be exclude this code from translatable section.</translate>
#: <translate><!--T:23--> As example, for <tvar name=1><code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code></tvar>, translation markup in translatable page will be:</translate>
#: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}}
#: <translate><!--T:15--> This is useful for bulleted lists of links, e.g. in the "See also:" sections.</translate>
# <translate><!--T:16--> If link text does not have to be different from the name of landing page, will be better to embed all this code into <tvar name=1>{{tag|tvar|open}}</tvar>.</translate>
#: <translate><!--T:24--> As example, instead <tvar name=1>{{Tlx|ll|Communication}}</tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>.</translate>
<translate>
== See also == <!--T:7-->
</translate>
* [[Template:Localized link/messagedoc]] — <translate><!--T:17--> should be used for message documentation in translatable pages that use this template.</translate>
* {{tl|Translatable template}} - <translate><!--T:18--> alias <tvar name=1>{{tl|TNT}}</tvar> or <tvar name=2>{{tl|tnt}}</tvar></translate>
* {{tl|Translatable template name}} - <translate><!--T:19--> alias <tvar name=1>{{tl|TNTN}}</tvar> or <tvar name=2>{{tl|tntn}}</tvar></translate>
* {{tl|Page language link}} - <translate><!--T:20--> alias <tvar name=1>{{tl|pll}}</tvar></translate> - <translate><!--T:21--> add a link from a translatable page to another translatable page in the same language</translate>
}}
[[Category:Internationalization templates]]
</noinclude>
26f0ea08ccb53748f8a9c69c65e96d99b1db2575
Template:Dir
10
406
1246
1245
2023-06-13T18:05:02Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Dir]]: w
wikitext
text/x-wiki
{{#switch:{{lc:{{#if:{{{lang|}}}|{{{lang|}}}|{{#if:{{{1|}}}|{{{1|}}}|{{int:lang}}}}}}}}
|aeb|aeb-arab|aic|ar|arc|arq|ary|arz|azb|bcc|bgn|bqi|bqp|ckb|ckb-arab|dv|en-rtl|fa|fa-af|glk|ha-arab|haz|he|khw|kk-arab|kk-cn|ks|ks-arab|ku-arab|lki|lrc|luz|mzn|nqo|ota|phn|pnb|prd|prs|ps|sd|sdh|skr|skr-arab|tg-arab|tly|ug|ug-arab|ur|uz-arab|xpu|ydd|yi
={{#ifeq:{{{rtl|}}}|{{{rtl|-}}}|{{{rtl|}}}|{{#ifeq:{{{2|}}}|{{{2|-}}}|{{{2|}}}|rtl}}}}
|#default
={{#ifeq:{{{ltr|}}}|{{{ltr|-}}}|{{{ltr|}}}|{{#ifeq:{{{3|}}}|{{{3|-}}}|{{{3|}}}|ltr}}}}
}}<noinclude>{{documentation}}</noinclude>
2ea56bd56901a92d8a5cb44b0835e8534d5e0807
Template:Int
10
407
1248
1247
2023-06-13T18:05:03Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Int]]: w
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Int|renderIntMessage|{{{1}}}|missing={{{missing|}}}|lang={{{lang|}}}}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
33458d205943740a9f820054cc2950d639a84aa6
Module:String
828
77
1250
163
2023-06-13T18:05:04Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:String]]: w
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The fist index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
return str
6df794dd52434e0f6a372c9918f5a9dedd15f579
Module:Int
828
408
1252
1251
2023-06-13T18:05:04Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Int]]: w
Scribunto
text/plain
-- This is a helper module for [[Template:int]]
local templateTranslation = require('Module:Template translation')
local this = {}
function this.renderIntMessage(frame)
local args = frame.args
local pargs = (frame:getParent() or {}).args
local arguments = {}
for k, v in pairs(pargs) do
local n = tonumber(k) or 0
if (n >= 2) then
arguments[n - 1] = mw.text.trim(v)
end
end
local lang
if args.lang and args.lang ~= '' and mw.language.isValidCode(args.lang) then
lang = args.lang
else
lang = templateTranslation.getLanguage()
end
local msg = mw.message.new(mw.text.trim(args[1]), arguments):inLanguage(lang)
if msg:exists() or lang == 'qqx' then
if msg:isDisabled() then
return args.missing or ''
else
local msgstr = msg:plain()
return frame:preprocess(msgstr)
end
else
return args.missing ~= ''
and args.missing
or '⧼' .. args[1] .. '⧽'
end
end
return this
8bd789d31d4f269e575c5806864031420e6a5c86
Template:Localized link/en
10
409
1254
1253
2023-06-13T18:05:07Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Localized_link/en]]: w
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><!--
-->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|<b>
}}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }}
}}
|{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }}
}}
<!--if the translation page does not exist (or called from the source page), output as is-->
|{{#if:{{{nsp|}}}
|{{#if:{{PAGENAME:{{{1}}}}}
|{{PAGENAME:{{{1}}}}}
|{{{1}}}
}}
|{{{1}}}
}}
}}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)-->
|</b>
}}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude>
{{documentation|content=
{{tsh|ll|LL}}
{{High-use|35000}}
== Purpose ==
This helper template can be used to link to [[Special:LanguageStats|translatable pages]] in the user's language.
It uses the special page prefix <code>Special:MyLanguage/</code>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't.
It should be used in translated pages, so that they link to the right page even if there is no translated page in that language.
== Usage ==
{{Localized link/doc}}
If "<code>nsp</code>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<code>nsp</code>" parameter is defined by any value — link text displays the short pagename, without namespace.
=== Examples of simple usage ===
{{(}}{{!}} class="wikitable"
{{!}}-
! Use
! Becomes
{{!}}-
{{!}} {{Tlx|ll|Communication}}
{{!}} {{ll|Communication}}
{{!}}-
{{!}} {{Tlx|ll|Communication|コミュニケーション}}
{{!}} {{ll|Communication|コミュニケーション}}
{{!}}-
{{!}} {{Tlx|ll|Project:About}}
{{!}} {{ll|Project:About}}
{{!}}-
{{!}} {{Tlx|ll|Project:About|nsp{{=}}0}}
{{!}} {{ll|Project:About|nsp=0}}
{{!}}{{)}}
== Usage in translatable pages ==
On pages prepared for translation with the {{ll|Extension:Translate|nsp=0}} extension, this template may be used in three ways.
# Should better be substitute this template, and then the wikilink target embedded in a {{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}, separately from the translatable displayed text of the link.
#: As example, instead <code><nowiki>{{ll|Communication|About communication}}</nowiki></code>, translation markup in translatable page will be {{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}.
# Alternatively, may be exclude this code from translatable section.
#: As example, for <code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code>, translation markup in translatable page will be:
#: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}}
#: This is useful for bulleted lists of links, e.g. in the "See also:" sections.
# If link text does not have to be different from the name of landing page, will be better to embed all this code into {{tag|tvar|open}}.
#: As example, instead {{Tlx|ll|Communication}}, translation markup in translatable page will be {{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}.
== See also ==
* [[Template:Localized link/messagedoc]] — should be used for message documentation in translatable pages that use this template.
* {{tl|Translatable template}} - alias {{tl|TNT}} or {{tl|tnt}}
* {{tl|Translatable template name}} - alias {{tl|TNTN}} or {{tl|tntn}}
* {{tl|Page language link}} - alias {{tl|pll}} - add a link from a translatable page to another translatable page in the same language
}}
[[Category:Internationalization templates]]
</noinclude>
9e7370c695bb1a61b15996006b40f9e437acbba4
Template:Translatable/en
10
410
1256
1255
2023-06-13T18:05:08Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Translatable/en]]: w
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}|
|{{{1|{{FULLPAGENAME}}}}}
|{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}}
|1
|{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}}
}}
}}<noinclude>
{{Documentation|content=
{{Lua|Module:String}}
== Examples ==
* {{tlx|translatable}}
{{translatable}}
* {{tlx|translatable|2=Page name}}
{{translatable|1=Page name}}
* {{tlx|translatable|2=Page name/{{PAGELANGUAGE}} }}
{{translatable|1=Page name/{{PAGELANGUAGE}} }}
}}
[[Category:Internationalization templates{{#translation:}}]]
</noinclude>
7fee927d686a6bf590db77885cbef8376112670f
Template:Nowrap/styles.css
10
411
1258
1257
2023-06-13T18:05:14Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Nowrap/styles.css]]: w
sanitized-css
text/css
.nowrap,
.nowrap a:before,
.nowrap .selflink:before {
white-space: nowrap;
}
becbf59e1bc0e28944a852c01b3f8473995d87b8
Template:Magic word
10
412
1260
1259
2023-06-13T18:05:15Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Magic_word]]: w
wikitext
text/x-wiki
<onlyinclude><!--
-->{{#ifexpr:<!--
-->{{yesno|{{{code|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!--
-->|<!--
-->{{#if:{{yesno|{{{mono|}}}}}|<templatestyles src="Template:Mono/styles.css"/>}}<!--
-->{{#if:{{yesno|{{{nowrap|}}}}}|<templatestyles src="Template:Nowrap/styles.css"/>}}<!--
--><{{#if:{{yesno|{{{code|}}}}}|code|span}} {{#ifexpr:<!--
-->{{yesno|{{{mono|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!--
-->|<!--
-->class="{{yesno|{{{mono|}}}|yes=monospaced|no=}} {{yesno|{{{nowrap|}}}|yes=nowrap|no=}}"<!--
-->}}><!--
-->}}<!--
-->{{((}}<!--
-->[[mw:Special:MyLanguage/{{#switch:{{{ext|}}}<!--
Extensions with public domain help page documentation:
-->|Translate=Help:Extension:Translate<!--
-->{{#switch:{{{1}}}<!--
-->|#translation=/Page translation administration<!--
-->}}<!--
-->|ParserFunctions=Help:Extension:ParserFunctions<!--
Extensions with documentation in subpages of the “Extension:” namespace:
-->|Page Forms=Extension:Page Forms<!--
-->{{#switch:{{{1}}}<!--
-->|#arraymap<!--
-->|#arraymaptemplate<!--
-->|#template_display<!--
-->|#template_params<!--
-->=/Page Forms and templates<!--
-->|#autoedit<!--
-->|#forminput<!--
-->|#formlink<!--
-->|#formredlink<!--
-->=/Linking to forms<!--
-->|#queryformlink<!--
-->=/Creating query forms<!--
-->|#default_form<!--
-->=/The "edit with form" tab<!--
-->}}<!--
Default page when `ext` is specified:
-->|#default=Extension:{{{ext}}}<!--
Default page when `ext` is not specified:
-->|=Help:Magic words<!--
-->}}<includeonly>#{{#ifeq:{{Str left|{{{1}}}}}|#<!--
Workaround bug which causes the leading `#`s in the fragment
of a “Special:MyLanguage/...” link to be discarded:
-->|.23{{Str right|{{{1}}}|1}}<!--
-->|{{{1}}}<!--
-->}}|{{{1}}}</includeonly><noinclude>|magic word</noinclude>]]<!--
-->{{#ifexpr:<!--
-->{{#ifeq:{{{2|¬}}}|{{{2}}}|1|0}}or{{#ifeq:{{Str left|{{{1}}}}}|#|1|0}}<!--
-->|:{{{2|}}}<!--
-->}}<!--
-->{{))}}<!--
-->{{#ifexpr:<!--
-->{{yesno|{{{code|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!--
-->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!--
-->|</{{#if:{{yesno|{{{code|}}}}}|code|span}}><!--
-->}}<!--
--></onlyinclude>
{{Documentation}}
aa8986c941a5e9ac9ff1dd2876f7455839290bd4
Template:Str left
10
413
1262
1261
2023-06-13T18:05:15Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Str_left]]: w
wikitext
text/x-wiki
<includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude>
{{documentation}}
</noinclude>
b0625523728bd6c2c9e6c0a5722a80621103d361
Template:Str right
10
414
1264
1263
2023-06-13T18:05:16Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Str_right]]: w
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0
|{{{1}}}
|{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | |
{{{{{|safesubst:}}}#invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }}
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1a455b5358c1f1bac690d40d8310e098b907075a
Template:Tmpl
10
415
1266
1265
2023-06-13T18:05:16Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Tmpl]]: w
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
c29b0448e5b4220ef09fba833ddabdebb7b41ceb
Module:Tmpl
828
416
1268
1267
2023-06-13T18:05:16Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Tmpl]]: w
Scribunto
text/plain
-- This is a helper module for {{tmpl}}
require('strict')
-- The trailing `[^0-9]?` ensures that `$10` doesn't potentially change
-- from being treated as `${1}0` to being treated as `${10}`
-- if the number of supported parameters is ever expanded:
local PATTERN = "%$([1-9])[^0-9]?"
local this = {}
function this.renderTmpl(frame)
local args = frame.args
local pargs = (frame:getParent() or {}).args
local input = pargs[0] or ''
local result = {}
local prevPos = 1
do
local startPos, _, k
while true do
startPos, _, k = string.find(input, PATTERN, prevPos)
if (not startPos) then break end
table.insert(result, string.sub(input, prevPos, startPos - 1))
local n = tonumber(k)
local r = pargs[n]
if (r) then
table.insert(result, r)
else
table.insert(result, '$' .. n)
end
prevPos = startPos + #k + 1
end
end
table.insert(result, string.sub(input, prevPos))
return table.concat(result)
end
return this
a44958c165a7b935145f1c840d1ec428886bf193
Template:Nmbox
10
417
1270
1269
2023-06-13T18:05:17Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Nmbox]]: w
wikitext
text/x-wiki
<templatestyles src="Template:Nmbox/styles.css" />
<div class="nmbox noprint {{dir|{{PAGELANGUAGE}}|mw-content-rtl|mw-content-ltr}}">{{#if: {{{image|}}}{{{header|}}}
|<div class="nmbox-header">{{#if: {{{image|}}}|<div class="nmbox-image mbox-image">{{{image|}}}</div>}}{{{header|}}}
</div>}}
{{#if:{{{text|}}}|<div class="nmbox-text mbox-text">{{{text|}}}</div>}}
</div><noinclude>
{{documentation}}
</noinclude>
65d650d49fef1164b81d6520492d31f2e477c2bf
Template:Nmbox/styles.css
10
418
1272
1271
2023-06-13T18:05:17Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Nmbox/styles.css]]: w
sanitized-css
text/css
.nmbox {
clear: both;
background: #f8f9fa;
border: 1px solid #AAA;
box-sizing: border-box;
margin: 2px 0;
padding: 0;
}
.nmbox * {
box-sizing: border-box;
}
.nmbox-header {
background: #eaecf0;
padding: 4px 0.5em;
font-weight: bold;
text-align: center;
white-space: nowrap
}
.nmbox .mbox-image {
display: inline-block;
padding-right: 1em;
}
.nmbox-text {
border-top: 1px solid #AAA;
width: 100%;
padding: 4px 0.5em;
}
@media screen and (min-width: 768px) {
.nmbox-header {
display: table-cell;
border-right: 1px solid #AAA;
width: 1%;
}
.nmbox-text {
border-top: none;
display: table-cell;
}
}
167c42527fe0b23e717da7cc834c96d0c4f9d1cc
Template:Ombox
10
146
1274
340
2023-06-13T18:05:18Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Ombox]]: w
wikitext
text/x-wiki
{{#invoke:Message box|ombox}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
0e54065432d540737b9e56c4e3a8e7f74d4534ea
Template:Tlc
10
419
1276
1275
2023-06-13T18:05:18Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Tlc]]: w
wikitext
text/x-wiki
<onlyinclude><!--
--><templatestyles src="Template:Nowrap/styles.css"/><!--
--><code class="nowrap"><!--
-->{{((}}<!--
--><includeonly>{{{1}}}</includeonly><!--
--><noinclude>tlc{{!}}...</noinclude><!--
-->{{#ifeq:{{{2|x}}}|{{{2|}}}| {{!}}{{{2}}} | }}<!--
-->{{#ifeq:{{{3|x}}}|{{{3|}}}| {{!}}{{{3}}} | }}<!--
-->{{#ifeq:{{{4|x}}}|{{{4|}}}| {{!}}{{{4}}} | }}<!--
-->{{#ifeq:{{{5|x}}}|{{{5|}}}| {{!}}{{{5}}} | }}<!--
-->{{#ifeq:{{{6|x}}}|{{{6|}}}| {{!}}{{{6}}} | }}<!--
-->{{#ifeq:{{{7|x}}}|{{{7|}}}| {{!}}{{{7}}} | }}<!--
-->{{#ifeq:{{{8|x}}}|{{{8|}}}| {{!}}{{{8}}} | }}<!--
-->{{#ifeq:{{{9|x}}}|{{{9|}}}| {{!}}{{{9}}} | }}<!--
-->{{))}}<!--
--></code><!--
--></onlyinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
587b3ef23459fe76a16b04d3770178ad99c11882
Template:Languages
10
420
1280
1279
2023-06-13T18:05:22Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Languages]]: w
wikitext
text/x-wiki
{{#ifeq:<languages exists/>|<languages/>|<languages/>|
{{nmbox
| header = {{ll|Project:Language policy|{{Languages/Title|{{SUBPAGENAME}}}}}}
| text =
'''[[{{{1|:{{translatable}}}}}|English]]''' {{Languages/Lang|af|{{{1|}}}|
}}{{Languages/Lang|ar|{{{1|}}}|
}}{{Languages/Lang|ast|{{{1|}}}|
}}{{Languages/Lang|az|{{{1|}}}|
}}{{Languages/Lang|bcc|{{{1|}}}|
}}{{Languages/Lang|be|{{{1|}}}|
}}{{Languages/Lang|be-tarask|{{{1|}}}|
}}{{Languages/Lang|bg|{{{1|}}}|
}}{{Languages/Lang|br|{{{1|}}}|
}}{{Languages/Lang|bn|{{{1|}}}|
}}{{Languages/Lang|bs|{{{1|}}}|
}}{{Languages/Lang|ca|{{{1|}}}|
}}{{Languages/Lang|ckb|{{{1|}}}|
}}{{Languages/Lang|cs|{{{1|}}}|
}}{{Languages/Lang|da|{{{1|}}}|
}}{{Languages/Lang|de|{{{1|}}}|
}}{{Languages/Lang|diq|{{{1|}}}|
}}{{Languages/Lang|el|{{{1|}}}|
}}{{Languages/Lang|eo|{{{1|}}}|
}}{{Languages/Lang|es|{{{1|}}}|
}}{{Languages/Lang|fa|{{{1|}}}|
}}{{Languages/Lang|fi|{{{1|}}}|
}}{{Languages/Lang|fr|{{{1|}}}|
}}{{Languages/Lang|gl|{{{1|}}}|
}}{{Languages/Lang|gu|{{{1|}}}|
}}{{Languages/Lang|he|{{{1|}}}|
}}{{Languages/Lang|hi|{{{1|}}}|
}}{{Languages/Lang|hr|{{{1|}}}|
}}{{Languages/Lang|hu|{{{1|}}}|
}}{{Languages/Lang|hy|{{{1|}}}|
}}{{Languages/Lang|id|{{{1|}}}|
}}{{Languages/Lang|io|{{{1|}}}|
}}{{Languages/Lang|it|{{{1|}}}|
}}{{Languages/Lang|ja|{{{1|}}}|
}}{{Languages/Lang|jv|{{{1|}}}|
}}{{Languages/Lang|ka|{{{1|}}}|
}}{{Languages/Lang|kk|{{{1|}}}|
}}<span class="autonym">{{Languages/Lang|km|{{{1|}}}|
}}</span>{{Languages/Lang|ko|{{{1|}}}|
}}{{Languages/Lang|ko-kp|{{{1|}}}|
}}{{Languages/Lang|ksh|{{{1|}}}|
}}{{Languages/Lang|kw|{{{1|}}}|
}}{{Languages/Lang|la|{{{1|}}}|
}}{{Languages/Lang|map-bms|{{{1|}}}|
}}{{Languages/Lang|min|{{{1|}}}|
}}{{Languages/Lang|mk|{{{1|}}}|
}}{{Languages/Lang|ml|{{{1|}}}|
}}<span class="autonym">{{Languages/Lang|mr|{{{1|}}}|
}}</span>{{Languages/Lang|ms|{{{1|}}}|
}}{{Languages/Lang|mwl|{{{1|}}}|
}}{{Languages/Lang|nl|{{{1|}}}|
}}{{Languages/Lang|no|{{{1|}}}|
}}{{Languages/Lang|oc|{{{1|}}}|
}}{{Languages/Lang|or|{{{1|}}}|
}}{{Languages/Lang|pl|{{{1|}}}|
}}{{Languages/Lang|pt|{{{1|}}}|
}}{{Languages/Lang|pt-br|{{{1|}}}|
}}{{Languages/Lang|ro|{{{1|}}}|
}}{{Languages/Lang|ru|{{{1|}}}|
}}{{Languages/Lang|sc|{{{1|}}}|
}}{{Languages/Lang|si|{{{1|}}}|
}}{{Languages/Lang|sk|{{{1|}}}|
}}{{Languages/Lang|sl|{{{1|}}}|
}}{{Languages/Lang|so|{{{1|}}}|
}}{{Languages/Lang|sq|{{{1|}}}|
}}{{Languages/Lang|sr|{{{1|}}}|
}}{{Languages/Lang|sv|{{{1|}}}|
}}{{Languages/Lang|ta|{{{1|}}}|
}}{{Languages/Lang|th|{{{1|}}}|
}}{{Languages/Lang|tr|{{{1|}}}|
}}{{Languages/Lang|uk|{{{1|}}}|
}}{{Languages/Lang|vi|{{{1|}}}|
}}{{Languages/Lang|yi|{{{1|}}}|
}}{{Languages/Lang|yue|{{{1|}}}|
}}{{Languages/Lang|zh|{{{1|}}}|
}}{{Languages/Lang|zh-hans|{{{1|}}}|
}}{{Languages/Lang|zh-hant|{{{1|}}}|
}}{{Languages/Lang|zh-tw|{{{1|}}}}}|
}}<!--/nmbox--><includeonly>{{#if:{{Languages/Lang|af|{{{1|}}}|
}}{{Languages/Lang|ar|{{{1|}}}|
}}{{Languages/Lang|ast|{{{1|}}}|
}}{{Languages/Lang|az|{{{1|}}}|
}}{{Languages/Lang|bcc|{{{1|}}}|
}}{{Languages/Lang|be|{{{1|}}}|
}}{{Languages/Lang|be-tarask|{{{1|}}}|
}}{{Languages/Lang|bg|{{{1|}}}|
}}{{Languages/Lang|br|{{{1|}}}|
}}{{Languages/Lang|bn|{{{1|}}}|
}}{{Languages/Lang|bs|{{{1|}}}|
}}{{Languages/Lang|ca|{{{1|}}}|
}}{{Languages/Lang|ckb|{{{1|}}}|
}}{{Languages/Lang|cs|{{{1|}}}|
}}{{Languages/Lang|da|{{{1|}}}|
}}{{Languages/Lang|de|{{{1|}}}|
}}{{Languages/Lang|diq|{{{1|}}}|
}}{{Languages/Lang|el|{{{1|}}}|
}}{{Languages/Lang|eo|{{{1|}}}|
}}{{Languages/Lang|es|{{{1|}}}|
}}{{Languages/Lang|fa|{{{1|}}}|
}}{{Languages/Lang|fi|{{{1|}}}|
}}{{Languages/Lang|fr|{{{1|}}}|
}}{{Languages/Lang|gl|{{{1|}}}|
}}{{Languages/Lang|gu|{{{1|}}}|
}}{{Languages/Lang|he|{{{1|}}}|
}}{{Languages/Lang|hi|{{{1|}}}|
}}{{Languages/Lang|hr|{{{1|}}}|
}}{{Languages/Lang|hu|{{{1|}}}|
}}{{Languages/Lang|hy|{{{1|}}}|
}}{{Languages/Lang|id|{{{1|}}}|
}}{{Languages/Lang|io|{{{1|}}}|
}}{{Languages/Lang|it|{{{1|}}}|
}}{{Languages/Lang|ja|{{{1|}}}|
}}{{Languages/Lang|jv|{{{1|}}}|
}}{{Languages/Lang|ka|{{{1|}}}|
}}{{Languages/Lang|kk|{{{1|}}}|
}}{{Languages/Lang|km|{{{1|}}}|
}}{{Languages/Lang|ko|{{{1|}}}|
}}{{Languages/Lang|ko-kp|{{{1|}}}|
}}{{Languages/Lang|ksh|{{{1|}}}|
}}{{Languages/Lang|kw|{{{1|}}}|
}}{{Languages/Lang|la|{{{1|}}}|
}}{{Languages/Lang|map-bms|{{{1|}}}|
}}{{Languages/Lang|min|{{{1|}}}|
}}{{Languages/Lang|mk|{{{1|}}}|
}}{{Languages/Lang|ml|{{{1|}}}|
}}{{Languages/Lang|mr|{{{1|}}}|
}}{{Languages/Lang|ms|{{{1|}}}|
}}{{Languages/Lang|mwl|{{{1|}}}|
}}{{Languages/Lang|nl|{{{1|}}}|
}}{{Languages/Lang|no|{{{1|}}}|
}}{{Languages/Lang|oc|{{{1|}}}|
}}{{Languages/Lang|or|{{{1|}}}|
}}{{Languages/Lang|pl|{{{1|}}}|
}}{{Languages/Lang|pt|{{{1|}}}|
}}{{Languages/Lang|pt-br|{{{1|}}}|
}}{{Languages/Lang|ro|{{{1|}}}|
}}{{Languages/Lang|ru|{{{1|}}}|
}}{{Languages/Lang|si|{{{1|}}}|
}}{{Languages/Lang|sk|{{{1|}}}|
}}{{Languages/Lang|sl|{{{1|}}}|
}}{{Languages/Lang|so|{{{1|}}}|
}}{{Languages/Lang|sq|{{{1|}}}|
}}{{Languages/Lang|sr|{{{1|}}}|
}}{{Languages/Lang|sv|{{{1|}}}|
}}{{Languages/Lang|ta|{{{1|}}}|
}}{{Languages/Lang|th|{{{1|}}}|
}}{{Languages/Lang|tr|{{{1|}}}|
}}{{Languages/Lang|uk|{{{1|}}}|
}}{{Languages/Lang|vi|{{{1|}}}|
}}{{Languages/Lang|yi|{{{1|}}}|
}}{{Languages/Lang|yue|{{{1|}}}|
}}{{Languages/Lang|zh|{{{1|}}}|
}}{{Languages/Lang|zh-hans|{{{1|}}}|
}}{{Languages/Lang|zh-hant|{{{1|}}}|
}}{{Languages/Lang|zh-tw|{{{1|}}}}}
||[[Category:Languages pages without translations]]}}<!--/#if--><!--
-->[[Category:Languages pages]]<!--
-->{{#switch:{{PAGELANGUAGE}}
|en=<!--empty-->
|ku-latn=[[Category:Languages pages/ku]]
|zh-hans|zh-hant=[[Category:Languages pages/zh]]
|#default=[[Category:Languages pages{{#translation:}}]]
}}<!--/#switch--></includeonly>}}<!--/#ifeq--><noinclude>
{{documentation}}
</noinclude>
55bb0db791ef7b2ac02d610038d723c74f71cd00
Template:Languages/Title
10
421
1282
1281
2023-06-13T18:05:23Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Languages/Title]]: w
wikitext
text/x-wiki
{{LangSwitch|lang={{{1|}}}
|default={{int:tpt-languages-legend{{#if:{{{1|}}}|/{{{1}}} }} }}
|aln=Gjuha:
|am=ቋምቋ፦
|an=Idioma:
|ang=Sprǣc:
|ar=:اللغة
|arc=ܠܫܢܐ:
|arn=Dungun:
|arz=:اللغة
|avk=Ava:
|ay=Aru:
|az=Dil:
|bat-smg=Kalba:
|bcc=زبان:
|bcl=Tataramon:
|cdo=Ngṳ̄-ngiòng:
|ceb=Pinulongan:
|ch=Lengguahe:
|ckb-arab=زمان:
|co=Lingua :
|crh-cyrl=Тиль:
|crh-latn=Til:
|cu=ѩꙁꙑ́къ :
|cv=Чĕлхе:
|ext=Palra:
|fa=زبان:
|fo=Mál:
|frc=Langue :
|fy=Taal:
|ga=Teanga:
|gag=Dil:
|gan-hans=语言:
|gan-hant=語言:
|gn=Ñe'ẽ:
|got=Razda:
|grc=Γλῶσσα:
|gu=ભાષા:
|gv=Çhengey:
|hak=Ngî-ngièn:
|haw=Kou 'ōlelo:
|he=שפה:
|hi=भाषा:
|hif-latn=Bhasa:
|hy=Լեզու.
|ie=Lingue:
|ilo=Lengguahe:
|ja=言語:
|ka=ენა:
|kaa=Til:
|kg=Ndinga:
|kiu=Zon:
|kk-arab=:ٴتىل
|kk-latn=Til:
|km=ភាសា៖
|kn=ಭಾಷೆ:
|kv=Кыв:
|kw=Yeth:
|la=Lingua:
|li=Taol:
|lij=Lengoa:
|loz=Zwa Siselect:
|lzh=語:
|mdf=Кяль:
|mg=fiteny:
|mhr=Йылме:
|ml=ഭാഷ:
|mn=Хэл:
|mwl=Lhéngua:
|my=ဘာသာ:
|nah=Tlahtōlli:
|nap=Lengua:
|nds=Spraak:
|nds-nl=Taal:
|ne=भाषा:
|new=भाषा:
|nso=Polelo:
|os=Æвзаг:
|pa=ਭਾਸ਼ਾ:
|pam=Amanu:
|pdt=Sproak:
|pnb=بولی:
|pnt=Γλώσσαν:
|prg=Bilā:
|ps=ژبه:
|qu=Rimay:
|sa=भाषा:
|sah=Омугун тыла:
|sc=Limba:
|sdc=Linga:
|se=Giella:
|sei=Itom:
|shi=tutlayt:
|si=භාෂාව:
|sli=Sproache:
|so=Luqada:
|sq=Gjuha:
|srn=Tongo:
|ss=Lúlwîmi:
|stq=Sproake:
|su=Basa:
|szl=Godka:
|ta=மொழி:
|te=భాష:
|tet=Lian:
|tg-cyrl=Забон:
|th=ภาษา:
|ti=ቋንቋ:
|tk=Dil:
|to=Lea:
|tyv=Дыл:
|ug-latn=Til:
|vec=Łéngua:
|vro=Kiil:
|wa=Lingaedje:
|war=Yinaknan:
|wo=Làkk:
|wuu=语言:
|xal=Келн:
|xh=Ulwimi:
|xmf=ნინა:
|yo=Èdè:
|yue=語言:
|zea=Taele:
|zu=Ulimi:
}}<noinclude>{{Documentation}}</noinclude>
8bade1b59d3829a030e04f265e135347310a41c4
Template:LangSwitch
10
422
1284
1283
2023-06-13T18:05:24Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:LangSwitch]]: w
wikitext
text/x-wiki
{{{
{{#switch: {{{ {{Uselang|lang={{{lang|}}}}} |}}}
| ~ = empty
| = {{#switch: {{{ {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}}
| ~ = empty
| = {{#switch: {{{ {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}}
| ~ = empty
| = {{#if: {{{default|}}} | default | en }}
| #default = {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}}
}}
| #default = {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}}
}}
| #default = {{Uselang|lang={{{lang|}}}}}
}}
|}}}<noinclude>
{{Documentation}}
</noinclude>
6276da6db4a231df3efb5b4f4a68cc35dc2b8211
Template:Uselang
10
423
1286
1285
2023-06-13T18:05:24Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Uselang]]: w
wikitext
text/x-wiki
{{#if: {{{lang|}}} | {{{lang|}}} | {{int:Lang}} }}<noinclude>{{documentation}}</noinclude>
41c26d61caeb65fae8bd137d6b11adbfce457574
Template:GetFallback
10
424
1288
1287
2023-06-13T18:05:25Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:GetFallback]]: w
wikitext
text/x-wiki
{{#switch: {{Uselang|lang={{{1|}}}}}
| arz = ar
| be-x-old = be-tarask <!-- same language; be-x-old is used on be-x-old.wikipedia but be-tarask is the preferred code -->
| be-tarask = be-x-old
| crh-cyrl | crh-latn = crh
| als | bar | de-formal | de-at | de-ch | frr | ksh = de
| en-gb = en
| ckb | mzn | glk = fa
| mg | br | co | frp | ht | ty | wa = fr
| hif-deva | hif-latn = hif
| ike-cans | ike-latn = ike
| vec = it
| kk-arab | kk-cyrl | kk-latn | kk-cn | kk-kz | kk-tr = kk
| ku-latn | ku-arab = ku
| nds-nl | pdt = nds
| nds = nds-nl
| af | fy | li | nl-informal | vls | zea = nl
| szl | csb = pl
| pt-br = pt
| ruq-cyrl | ruq-grek | ruq-latn = ruq
| sr-ec | sr-el = sr
| tg-cyrl | tg-latn = tg
| tt-cyrl | tt-latn = tt
| gan | gan-hans | ii | wuu | za | zh | zh-cn | zh-my | zh-sg = zh-hans
| ami | cdo | gan-hant | hak | lzh | nan | pwn | szy | tay | trv | zh-classical | zh-hk | zh-min-nan | zh-mo | zh-tw = zh-hant
| #default = {{#if: {{{default|}}} | {{{default|}}} | en }}
}}<noinclude>
{{documentation}}
</noinclude>
7deecc99a03a7fd2bab8ac12e18aa7a782979d2f
Template:Languages/Lang
10
425
1290
1289
2023-06-13T18:05:25Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Languages/Lang]]: w
wikitext
text/x-wiki
{{#ifexist: {{#if:{{{2|}}}|{{{2}}}|{{translatable}}}}/{{{1|}}}
| • <bdi lang="{{{1|}}}">{{#if:{{{2|}}}
|<span class="plainlinks">[{{fullurl:{{{2|}}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span>
|<span class="plainlinks">[{{fullurl:{{translatable}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span>
}}</bdi>
}}<noinclude>
{{Documentation}}
</noinclude>
7aabf502401e5b3500551280a475fafa5adc42bc
Template:(!
10
426
1292
1291
2023-06-13T18:05:26Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:(!]]: w
wikitext
text/x-wiki
<onlyinclude><includeonly>{|</includeonly></onlyinclude><nowiki>{|</nowiki>
{{Documentation}}
13b9672984a140a00c683872647b3b2f8f29c381
Template:!)
10
427
1294
1293
2023-06-13T18:05:26Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:!)]]: w
wikitext
text/x-wiki
<onlyinclude>|}</onlyinclude>
{{Documentation}}
469fe8c3efa0a39c92333858a80cd9d9b8b82968
Template:Unordered list
10
428
1296
1295
2023-06-13T18:05:27Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Unordered_list]]: w
wikitext
text/x-wiki
<onlyinclude>{{<includeonly>safesubst:</includeonly>#invoke:List|bulleted}}</onlyinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
bb14fb759a0fb4040a621405e0c2616019ac9a62
Template:Used in system
10
429
1298
1297
2023-06-13T18:05:27Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Used_in_system]]: w
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#switch:<translate></translate>
| =
{{ombox
| type = content
| text =
'''<translate><!--T:1--> This <tvar|1>{{lcfirst:{{NAMESPACE}}}}</> is used {{<tvar|2>#if:{{{1|}}}|{{{1}}}</>|in system messages}}.</translate>'''<br/>
<translate><!--T:2--> Changes to it can cause immediate changes to the MediaWiki user interface.</translate> <!--
-->{{tmpl|0=<translate><!--T:3--> To avoid large-scale disruption, any changes should first be tested in this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>'s [[<tvar|2>$1/sandbox</>|/sandbox]] or [[<tvar|3>$1/testcases</>|/testcases]] subpage, or in your own [[<tvar|4>Special:MyLanguage/Help:Subpages</>|user space]].</translate>
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}}
| #default = {{SUBJECTPAGENAME}}
}}<!--#switch-->
}}<!--tmpl--><!--
--><translate><!--T:4--> The tested changes can then be added in one single edit to this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>.</translate> <!--
-->{{tmpl|0=<translate><!--T:5--> Please discuss any changes {{<tvar|1>#if:{{{2|}}}</>|at <tvar|2>[[{{{2}}}]]</>|on the [[<tvar|3>$1</>|talk page]]}} before implementing them.</translate>
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}}
| #default = {{TALKPAGENAME}}
}}<!--#switch-->
}}<!--tmpl-->
}}
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{documentation}}
</noinclude>
9473a2f94595eec596f5d10d2e45e7711cff83cb
Template:Used in system/en
10
430
1300
1299
2023-06-13T18:05:28Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Used_in_system/en]]: w
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude>{{#switch:
| =
{{ombox
| type = content
| text =
'''This {{lcfirst:{{NAMESPACE}}}} is used {{#if:{{{1|}}}|{{{1}}}|in system messages}}.'''<br/>
Changes to it can cause immediate changes to the MediaWiki user interface. <!--
-->{{tmpl|0=To avoid large-scale disruption, any changes should first be tested in this {{lcfirst:{{NAMESPACE}}}}'s [[$1/sandbox|/sandbox]] or [[$1/testcases|/testcases]] subpage, or in your own [[Special:MyLanguage/Help:Subpages|user space]].
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}}
| #default = {{SUBJECTPAGENAME}}
}}<!--#switch-->
}}<!--tmpl--><!--
-->The tested changes can then be added in one single edit to this {{lcfirst:{{NAMESPACE}}}}. <!--
-->{{tmpl|0=Please discuss any changes {{#if:{{{2|}}}|at [[{{{2}}}]]|on the [[$1|talk page]]}} before implementing them.
|1={{#switch: {{SUBPAGENAME}}
| doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}}
| #default = {{TALKPAGENAME}}
}}<!--#switch-->
}}<!--tmpl-->
}}
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}}
}}<noinclude>
{{documentation}}
</noinclude>
10ae6df0c95ce682437a36e6cb3c517e21d200d0
Template:Module rating
10
196
1302
555
2023-06-13T18:05:28Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Module_rating]]: w
wikitext
text/x-wiki
<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]]
| alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]]
| beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]]
| release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]]
| protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]]
| semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|Module rating is invalid or not specified.}}
}}
}}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude>
{{module rating|release|nocat=true|demospace=module}}
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc
Template:Module rating/en
10
431
1304
1303
2023-06-13T18:05:30Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Module_rating/en]]: w
wikitext
text/x-wiki
<noinclude>
<languages />
</noinclude><includeonly>{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:OOjs UI icon text-style.svg|40x40px|link=]]
| alpha | a = [[File:OOjs UI icon bold-a.svg|40x40px|link=]]
| beta | b = [[File:OOjs UI icon bold-b.svg|40x40px|link=]]
| release | r | general | g = [[File:OOjs UI icon check-constructive.svg|40x40px|link=]]
| protected | protect | p = [[File:{{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|Cascade-protection-shackle.svg|{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop|Full-protection-shackle-red.svg|Semi-protection-shackle-no-text.svg}}}}|40x40px|link=]]
| semiprotected | semiprotect | semi = [[File:Semi-protection-shackle.svg|40x40px|link=]]
| #default = [[File:OOjs UI icon alert-destructive.svg|40x40px|link=]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = This module is rated as [[Special:MyLanguage/Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = This module is rated as [[Special:MyLanguage/Category:Modules in alpha|alpha]]. It is ready for third party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = This module is rated as [[Special:MyLanguage/Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = This module is rated as [[Special:MyLanguage/Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[w:WP:TESTCASES|sandbox testing]] rather than repeated trial-and-error editing.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = This module is [[Special:MyLanguage/Category:Modules subject to page protection|subject to {{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|cascading|page}} protection]]. It is a highly visible module in use by a very large number of pages. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Special:MyLanguage/Project:Protected page|protected]] from editing.<!--
-->{{#ifexpr:
<!-- No category for /doc or /sandbox subpages -->
{{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}}
|| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|1=Module rating is invalid or not specified.}}
}}
}}|{{error|1=Error: {{tl|Module rating}} must be placed in the Module namespace.}}|demospace={{{demospace|<noinclude>module</noinclude>}}}}}</includeonly><noinclude>
{{documentation|content=
This template is used to rate [[Lua/Overview|Lua modules]] by quality.
It is placed at the top of the module's /doc subpage.
It produces a message informing users about the rating system, and it also places the module into a tracking category.
== Usage ==
Basic usage:
{{pre|{{tlx|module rating|''rating''}}}}
Without categories:
{{pre|{{tlx|module rating|''rating''|3=nocat=true}}}}
If {{tlx|Module rating}} is used outside the Module namespace, an error message is shown: {{module rating}}
== Ratings ==
The rating should be placed in the first positional parameter.
There are five different ratings: '''pre-alpha'''{{int|comma-separator}}'''alpha'''{{int|comma-separator}}'''beta'''{{int|comma-separator}}'''release'''{{int|and}}{{int|word-separator}}'''protected'''.
There are also short alias codes for each of the ratings.
{{(!}} class="wikitable"
! Rating
! Aliases
! Result
{{!}}-
{{!}} <code>pre-alpha</code>
{{!}} <code>prealpha</code><br/><code>pa</code>
{{!}} {{module rating|pre-alpha|nocat=true|demospace=Module}}
{{!}}-
{{!}} <code>alpha</code>
{{!}} <code>a</code>
{{!}} {{module rating|alpha|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>beta</code>
{{!}} <code>b</code>
{{!}} {{module rating|beta|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>release</code>
{{!}} <code>r</code><br/><code>general</code><br/><code>g</code>
{{!}} {{module rating|release|nocat=true|demospace=module}}
{{!}}-
{{!}} <code>protected</code>
{{!}} <code>protect</code><br/><code>p</code>
{{!}} {{module rating|protected|nocat=true|demospace=module}}
{{!}}-
{{!}} ''Anything else or if missing''
{{!}}
{{!}} {{module rating|prdaskidkated|nocat=true|demospace=module}}
{{!}}-
{{!)}}
== TemplateData ==
{{Module rating/doc}}
== Categories ==
The template will put modules in one of the following categories, according to the rating specified:
* {{ll|Category:Modules in pre-alpha development}}
* {{ll|Category:Modules in alpha}}
* {{ll|Category:Modules in beta}}
* {{ll|Category:Modules for general use}}
* {{ll|Category:Modules subject to page protection}}
These categories are suppressed on pages ending with /doc.
To suppress categories on all pages, you can use the code {{para|nocat|true}}.
== See also ==
* {{tl|module-rating categories}}
* [[Lua]]
* {{tl|Lua}}
}}
</noinclude>
be9721892adcac867736e318ab01f848049afb88
Module:Separated entries
828
432
1306
1305
2023-06-13T18:05:30Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Separated_entries]]: w
Scribunto
text/plain
-- This module takes positional parameters as input and concatenates them with
-- an optional separator. The final separator (the "conjunction") can be
-- specified independently, enabling natural-language lists like
-- "foo, bar, baz and qux". The starting parameter can also be specified.
local compressSparseArray = require('Module:TableTools').compressSparseArray
local p = {}
function p._main(args)
local separator = args.separator
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
and mw.text.decode(args.separator) or ''
local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator
-- Discard values before the starting parameter.
local start = tonumber(args.start)
if start then
for i = 1, start - 1 do args[i] = nil end
end
-- Discard named parameters.
local values = compressSparseArray(args)
return mw.text.listToText(values, separator, conjunction)
end
local function makeInvokeFunction(separator, conjunction, first)
return function (frame)
local args = require('Module:Arguments').getArgs(frame)
args.separator = separator or args.separator
args.conjunction = conjunction or args.conjunction
args.first = first or args.first
return p._main(args)
end
end
p.main = makeInvokeFunction()
p.br = makeInvokeFunction('<br />')
p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain())
return p
e80231ff3de01afd7f62a94e0a34dc1e67504085
Template:Separated entries
10
433
1308
1307
2023-06-13T18:05:31Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Separated_entries]]: w
wikitext
text/x-wiki
<onlyinclude>{{{{{|safesubst:}}}#invoke:Separated entries|main}}</onlyinclude>
{{Documentation}}
f242d7f2dfe32f26a4a0618a9b30a22925a9f79a
Module:Message box/doc
828
434
1310
1309
2023-06-13T18:05:31Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Message_box/doc]]: w
wikitext
text/x-wiki
<noinclude><!--
-->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!--
--><languages /><!--
--></noinclude>{{#switch:<translate></translate>
| =
<includeonly>{{Languages|Module:Message box/doc}}</includeonly>
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
<!-- {{Shared Template Warning|Module:Message box}} -->
{{Used in system}}
{{module rating|r}}
{{module rating|p}}
{{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}}
{{Uses TemplateStyles
| Module:Message box/ambox.css
| Module:Message box/cmbox.css
| Module:Message box/fmbox.css
| Module:Message box/imbox.css
| Module:Message box/ombox.css
| Module:Message box/tmbox.css
}}
<translate><!--T:1--> This is a meta-module that implements the message box templates <tvar name=1>{{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|and}}{{int|lang={{TRANSLATIONLANGUAGE}}|word-separator}}<nowiki/>}}</tvar>.</translate>
<translate><!--T:2--> It is intended to be used from Lua modules, and should not be used directly from wiki pages.</translate>
<translate><!--T:3--> If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.</translate>
<translate>
== Usage == <!--T:4-->
<!--T:5-->
To use this module from another Lua module, first you need to load it.
</translate>
<syntaxhighlight lang="lua">
local messageBox = require('Module:Message box')
</syntaxhighlight>
<translate><!--T:6--> To create a message box, use the <tvar name=1><code>main</code></tvar> function.</translate>
<translate><!--T:7--> It takes two parameters:</translate>
{{Unordered list
|1=
<translate><!--T:8--> the first is the box type (as a string).</translate>
|2=
<translate><!--T:9--> the second is a table containing the message box parameters.</translate>
}}
<syntaxhighlight lang="lua">
local box = messageBox.main( boxType, {
param1 = param1,
param2 = param2,
-- <translate nowrap><!--T:10--> More parameters...</translate>
})
</syntaxhighlight>
<translate>
<!--T:11-->
There are seven available box types:
</translate>
{{(!}} class="wikitable"
! <translate><!--T:12--> Box type</translate>
! <translate><!--T:13--> Template</translate>
! <translate><!--T:14--> Purpose</translate>
{{!}}-
{{!}} <code>mbox</code>
{{!}} {{tlx|mbox}}
{{!}} <translate><!--T:15--> For message boxes to be used in multiple namespaces</translate>
{{!}}-
{{!}} <code>ambox</code>
{{!}} {{tlx|ambox}}
{{!}} <translate><!--T:16--> For article message boxes</translate>
{{!}}-
{{!}} <code>cmbox</code>
{{!}} {{tlx|cmbox}}
{{!}} <translate><!--T:17--> For category message boxes</translate>
{{!}}-
{{!}} <code>fmbox</code>
{{!}} {{tlx|fmbox}}
{{!}} <translate><!--T:18--> For interface message boxes</translate>
{{!}}-
{{!}} <code>imbox</code>
{{!}} {{tlx|imbox}}
{{!}} <translate><!--T:19--> For file namespace message boxes</translate>
{{!}}-
{{!}} <code>tmbox</code>
{{!}} {{tlx|tmbox}}
{{!}} <translate><!--T:20--> For talk page message boxes</translate>
{{!}}-
{{!}} <code>ombox</code>
{{!}} {{tlx|ombox}}
{{!}} <translate><!--T:21--> For message boxes in other namespaces</translate>
{{!)}}
<translate>
<!--T:22-->
See the template page of each box type for the available parameters.
== Usage from <tvar name=1><code>#invoke</code></tvar> == <!--T:23-->
</translate>
<translate><!--T:24--> As well as the <tvar name=1><code>main</code></tvar> function, this module has separate functions for each box type.</translate>
<translate><!--T:25--> They are accessed using the code <tvar name=1>{{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}</tvar>, <tvar name=2>{{tlc|#invoke:Message box|ambox|...}}</tvar>, etc.</translate>
<translate><!--T:26--> These will work when called from other modules, but they access code used to process arguments passed from <tvar name=1>{{tlc|#invoke:...}}</tvar>, and so calling them will be less efficient than calling <tvar name=2><code>main</code></tvar></translate>.
<translate>
== Technical details == <!--T:27-->
<!--T:28-->
The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at <tvar name=1>[[Module:Message box/configuration]]</tvar>.
</translate>
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Modules{{#translation:}}]]
}}</includeonly><noinclude>
[[Category:Module documentation pages{{#translation:}}]]
</noinclude>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}}
}}
a3ce6d93b2de5e278623d054d7a82b6a21fb5b57
Module:Message box/doc/en
828
435
1312
1311
2023-06-13T18:05:33Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Message_box/doc/en]]: w
wikitext
text/x-wiki
<noinclude><!--
-->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!--
--><languages /><!--
--></noinclude>{{#switch:
| =
<includeonly>{{Languages|Module:Message box/doc}}</includeonly>
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
<!-- {{Shared Template Warning|Module:Message box}} -->
{{Used in system}}
{{module rating|r}}
{{module rating|p}}
{{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}}
{{Uses TemplateStyles
| Module:Message box/ambox.css
| Module:Message box/cmbox.css
| Module:Message box/fmbox.css
| Module:Message box/imbox.css
| Module:Message box/ombox.css
| Module:Message box/tmbox.css
}}
This is a meta-module that implements the message box templates {{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang=en|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang=en|and}}{{int|lang=en|word-separator}}<nowiki/>}}.
It is intended to be used from Lua modules, and should not be used directly from wiki pages.
If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.
== Usage ==
To use this module from another Lua module, first you need to load it.
<syntaxhighlight lang="lua">
local messageBox = require('Module:Message box')
</syntaxhighlight>
To create a message box, use the <code>main</code> function.
It takes two parameters:
{{Unordered list
|1=
the first is the box type (as a string).
|2=
the second is a table containing the message box parameters.
}}
<syntaxhighlight lang="lua">
local box = messageBox.main( boxType, {
param1 = param1,
param2 = param2,
-- More parameters...
})
</syntaxhighlight>
There are seven available box types:
{{(!}} class="wikitable"
! Box type
! Template
! Purpose
{{!}}-
{{!}} <code>mbox</code>
{{!}} {{tlx|mbox}}
{{!}} For message boxes to be used in multiple namespaces
{{!}}-
{{!}} <code>ambox</code>
{{!}} {{tlx|ambox}}
{{!}} For article message boxes
{{!}}-
{{!}} <code>cmbox</code>
{{!}} {{tlx|cmbox}}
{{!}} For category message boxes
{{!}}-
{{!}} <code>fmbox</code>
{{!}} {{tlx|fmbox}}
{{!}} For interface message boxes
{{!}}-
{{!}} <code>imbox</code>
{{!}} {{tlx|imbox}}
{{!}} For file namespace message boxes
{{!}}-
{{!}} <code>tmbox</code>
{{!}} {{tlx|tmbox}}
{{!}} For talk page message boxes
{{!}}-
{{!}} <code>ombox</code>
{{!}} {{tlx|ombox}}
{{!}} For message boxes in other namespaces
{{!)}}
See the template page of each box type for the available parameters.
== Usage from <code>#invoke</code> ==
As well as the <code>main</code> function, this module has separate functions for each box type.
They are accessed using the code {{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}, {{tlc|#invoke:Message box|ambox|...}}, etc.
These will work when called from other modules, but they access code used to process arguments passed from {{tlc|#invoke:...}}, and so calling them will be less efficient than calling <code>main</code>.
== Technical details ==
The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at [[Module:Message box/configuration]].
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Modules{{#translation:}}]]
}}</includeonly><noinclude>
[[Category:Module documentation pages{{#translation:}}]]
</noinclude>
| #default=
{{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}}
}}
eb0368b68b66e7bfdf66f0fbded73f3e1a15bad8
Module:Message box/ambox.css
828
436
1314
1313
2023-06-13T18:06:52Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Message_box/ambox.css]]: w
sanitized-css
text/css
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid #a2a9b1;
/* Default "notice" blue */
border-left: 10px solid #36c;
background-color: #fbfbfb;
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: #36c;
}
table.ambox-speedy {
/* Pink */
background-color: #fee7e6;
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: #b32424;
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: #a2a9b1;
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
095fcb9be9e02488b74d8093dc30d52fabe48ddd
Template:Ambox
10
437
1316
1315
2023-06-13T18:06:53Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Ambox]]: w
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Message box|ambox}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
c1c08bfba73362a15b45ed57cd7458ff9fbc5413
Template:Cmbox
10
438
1318
1317
2023-06-13T18:15:32Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Cmbox]]: w
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Message box|cmbox}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
04e229bdcc4ed5f8322f6a29df0d25d01316f5bf
Template:Transclude
10
439
1320
1319
2023-06-13T18:15:39Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Transclude]]: w
wikitext
text/x-wiki
<onlyinclude>{{#switch: {{NAMESPACE: {{{1}}} }}
|#default = {{FULLPAGENAME: {{{1}}} }} <!-- leading namespace prefix, eg "Template:Foo" -->
|{{ns:0}} =
{{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }}
| Template:{{{1}}} <!-- no leading colon, eg "Foo" -->
| {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article -->
}}
}}</onlyinclude>
{{Documentation}}
4865c652e363aa2057dba3e36aaffcdd76885a4e
Template:Navbar
10
109
1322
235
2023-06-13T18:15:39Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Navbar]]: w
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbar|navbar}}</includeonly><noinclude>
{{documentation}}
</noinclude>
868e3566b7e8a9a5a7f3dac75cac429c47de10d3
Template:Navbar/en
10
440
1324
1323
2023-06-13T18:15:40Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Navbar/en]]: w
wikitext
text/x-wiki
<noinclude>
<languages/>
</noinclude><templatestyles src="Module:Navbar/styles.css"/><span class="noprint plainlinks navbar" style="{{{style|}}}"><small><!--
-->{{#if:{{{mini|}}}{{{plain|}}}|<!--nothing-->|<!--else:
--><span style="{{{fontstyle|}}}">{{#if:{{{text|}}}|{{{text}}}|This box:}} </span>}}<!--
-->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">[</span>}}<!--
--><span style="white-space:nowrap;word-spacing:-.12em;"><!--
-->[[{{transclude|{{{1}}}}}|<span style="{{{fontstyle|}}}" title="View this template"><!--
-->{{#if:{{{mini|}}}|v|view}}</span>]]<!--
--><span style="{{{fontstyle|}}}"> <b>·</b> </span><!--
-->[{{fullurl:{{<noinclude><nowiki/></noinclude>TALKPAGENAME:{{transclude|{{{1}}}}}}}}} <span style="{{{fontstyle|}}}" title="Discuss this template"><!--
-->{{#if:{{{mini|}}}|d|talk}}</span>]<!--
-->{{#if:{{{noedit|}}}|<!--nothing-->|<!--else:
--><span style="{{{fontstyle|}}}"> <b>·</b> </span><!--
-->[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} <span style="{{{fontstyle|}}}" title="Edit this template"><!--
-->{{#if:{{{mini|}}}|e|edit}}</span>]}}<!--
--></span><!--
-->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">]</span>}}<!--
--></small></span><noinclude>
{{Documentation|content=
{{Uses TemplateStyles|Module:Navbar/styles.css}}
== Usage ==
=== General ===
When one of the following examples is placed inside a given [[Special:MyLanguage/Help:Templates|template]], it adds navbar navigational functionality:
: {{tlx|Navbar|Navbar|mini{{=}}1}}
: {{tlx|Navbar|Navbar|plain{{=}}1}}
: {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}}
The <code><nowiki>{{subst:PAGENAME}}</nowiki></code> will be substituted with the template's name when parsed by the servers.
For example, {{tlx|Navbar|navbar/doc}} gives:
{{Navbar|navbar/doc}}
=== Font-size ===
Font-size is <code>88%</code> when used in a navbar, and <code>100%</code> when nested in a navbox.
In the navbar, the weight is "<code>normal</code>"; when nested in navbox, it takes on the outer setting.
The middot is bold.
== Examples ==
=== Required parameters ===
* {{tlx|Navbar|''template name''}} — the template name is required.
=== Optional parameters ===
{{(}}{{!}} class="wikitable"
! Options
! Parameters
! Produces...
{{!}}-
{{!}} Basic
{{!}} {{tlx|Navbar|2=''template name''}}
{{!}} {{navbar|navbar/doc}}
{{!}}-
{{!}} Different text
{{!}} {{tlx|Navbar|2=''template name''|3=text{{=}}This template:}}
{{!}} {{navbar|navbar/doc|text=This template:}}
{{!}}-
{{!}} Without "This box:" text
{{!}} {{tlx|Navbar|2=''template name''|3=plain{{=}}1}}
{{!}} {{navbar|navbar/doc|plain=1}}
{{!}}-
{{!}} Short version
{{!}} {{tlx|Navbar|2=''template name''|3=mini{{=}}1}}
{{!}} {{navbar|navbar/doc|mini=1}}
{{!}}-
{{!}} With a color option
{{!}} {{tlx|Navbar|2=''template name''|3=fontstyle{{=}}color:green}}
{{!}} {{navbar|navbar/doc|fontstyle=color:green}}
{{!}}-
{{!}} With brackets
{{!}} {{tlx|Navbar|2=''template name''|3=brackets{{=}}1}}
{{!}} {{navbar|navbar/doc|brackets=1}}
{{!}}-
{{!}} Custom namespace
{{!}} {{tlx|Navbar|2=''namespaced template name''|3=plain{{=}}1|4=brackets{{=}}1}}
{{!}} {{navbar|User:Example|plain=1|brackets=1}}
{{!}}{{)}}
== TemplateData ==
{{Navbar/doc}}
== Notes ==
Navbar is contained within a {{tag|div}} in order to accommodate a horizontal unnumbered list.
This means it cannot be placed inside a {{tag|span}} or other inline element, because Tidy will 'fix' situations where it finds block elements inside inline elements.
<!--- PLEASE ADD METADATA TO THE <includeonly> SECTION HERE --->
<includeonly>
[[Category:Formatting templates{{#translation:}}]]
</includeonly>
}}
</noinclude>
3f53ea49b7933ec59655f626eef09d907f4d3f53
Module:Navbar/styles.css
828
93
1326
203
2023-06-13T18:15:43Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Navbar/styles.css]]: w
sanitized-css
text/css
/* {{pp|small=yes}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
9d4056f949b4f0b159e3d40dfb1a5f01e72f9571
Template:Para
10
108
1328
233
2023-06-13T18:15:45Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Para]]: w
wikitext
text/x-wiki
<code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">|{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}=}}{{{2|}}}</code><noinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
</noinclude>
06006deea2ed5d552aab61b4332321ab749ae7e8
Template:Tl
10
67
1330
137
2023-06-13T18:15:45Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Tl]]: w
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Redirect category shell|
{{R from move}}
}}
d6593bb3b4a866249f55d0f34b047a71fe1f1529
Template:Blue
10
441
1332
1331
2023-06-13T18:15:46Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Blue]]: w
wikitext
text/x-wiki
<span style="color:#0645AD;">{{{1}}}</span><noinclude>{{documentation}}
[[Category:Formatting templates{{#translation:}}|{{PAGENAME}}]]
</noinclude>
636ccfaac2c8947c9d036c2a6ac80aeb94f89713
Template:Flatlist
10
442
1334
1333
2023-06-13T18:15:47Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Flatlist]]: w
wikitext
text/x-wiki
<onlyinclude><templatestyles src="Template:Flatlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}</onlyinclude></div>
{{Documentation}}
457fae85129828fe5719eedf96107aac37dc02f4
Template:Flatlist/styles.css
10
443
1336
1335
2023-06-13T18:15:47Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Flatlist/styles.css]]: w
sanitized-css
text/css
/**
* Style for horizontal lists (separator following item).
* @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists
* @revision 9 (2016-08-10)
* @author [[User:Edokter]]
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
/* don't trust the note that says margin doesn't work with inline
* removing margin: 0 makes dds have margins again */
margin: 0;
display: inline;
}
/* Display nested lists inline */
/*
We remove .inline since it's not used here.
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
*/
.hlist dl dl, .hlist dl ol, .hlist dl ul,
.hlist ol dl, .hlist ol ol, .hlist ol ul,
.hlist ul dl, .hlist ul ol, .hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li,
.hlist .mw-empty-elt {
display: none;
}
/* Generate interpuncts */
.hlist dt:after {
content: ": ";
}
.hlist dd:after,
.hlist li:after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child:after,
.hlist dt:last-child:after,
.hlist li:last-child:after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li:before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child:before,
.hlist dt ol > li:first-child:before,
.hlist li ol > li:first-child:before {
content: " (" counter(listitem) "\a0";
}
9e75e584c328c44948ca9aae5c1cb4fa3c76a622
Module:Message box/cmbox.css
828
444
1338
1337
2023-06-13T18:15:48Z
Otonashi Ayana
2
1 revision imported from [[:mw:Module:Message_box/cmbox.css]]: w
sanitized-css
text/css
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
/* Default "notice" blue */
background-color: #dfe8ff;
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Blue */
background-color: #d8e8ff;
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: #ffdbdb;
}
table.cmbox-content {
/* Orange */
background-color: #ffe7ce;
}
table.cmbox-style {
/* Yellow */
background-color: #fff9db;
}
table.cmbox-move {
/* Purple */
background-color: #e4d8ff;
}
table.cmbox-protection {
/* Gray-gold */
background-color: #efefe1;
}
4a01a155911e7f7e0e61ad9eecbe3d762883b93b
Template:Tll
10
445
1340
1339
2023-06-13T18:15:49Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Tll]]: w
wikitext
text/x-wiki
<onlyinclude><!--
--><templatestyles src="Template:Mono/styles.css"/><!--
-->{{#if:{{yesno|{{{nowrap|}}}}}<!--
-->|<templatestyles src="Template:Nowrap/styles.css"/><!--
-->}}<span class="
monospaced
{{#if:{{yesno|{{{nowrap|}}}}}|nowrap}}
"><!--
-->{{((}}<!--
--><includeonly>[[Special:MyLanguage/Template:{{{{{|safesubst:}}}ucfirst:{{{1}}}}}|{{{1}}}]]</includeonly><!--
--><noinclude>[[Special:MyLanguage/{{translatable}}|Template link localized]]</noinclude><!--
-->{{{{{|safesubst:}}}#ifeq:{{{2|}}}|{{{2}}}|{{!}}{{{2}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{3|}}}|{{{3}}}|{{!}}{{{3}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{4|}}}|{{{4}}}|{{!}}{{{4}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{5|}}}|{{{5}}}|{{!}}{{{5}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{6|}}}|{{{6}}}|{{!}}{{{6}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{7|}}}|{{{7}}}|{{!}}{{{7}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{8|}}}|{{{8}}}|{{!}}{{{8}}}}}<!--
-->{{{{{|safesubst:}}}#ifeq:{{{9|}}}|{{{9}}}|{{!}}{{{9}}}}}<!--
-->{{))}}<!--
--></span><!--
--></onlyinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
590499106cdfec1fb3c1797e6cc6fc56946b3e0d
Template:Mbox/TemplateData
10
446
1342
1341
2023-06-13T18:15:49Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Mbox/TemplateData]]: w
wikitext
text/x-wiki
<noinclude>{{Documentation subpage}}
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
</noinclude>{{TemplateData header|editlinks=1|docpage=Mbox/TemplateData}}
<templatedata>
{
"description": "This is the specialized version of the {{mbox}} or “multi namespace message box” meta-template.",
"format": "block",
"params": {
"type": {
"label": "Type",
"suggestedvalues": [
"speedy",
"delete",
"content",
"style",
"notice",
"move",
"protection"
],
"type": "string",
"default": "notice",
"suggested": true
},
"image": {
"label": "Image (left)",
"suggestedvalues": [
"none"
],
"default": "Depends on the “type” parameter.",
"suggested": true,
"type": "content"
},
"imageright": {
"label": "Image (right)",
"type": "content"
},
"style": {
"label": "CSS Style",
"type": "string"
},
"textstyle": {
"label": "Text CSS Style",
"type": "string"
},
"text": {
"label": "Text",
"suggested": true,
"type": "content"
},
"small": {
"label": "Small?",
"suggestedvalues": [
"{{{small|}}}",
"left",
"yes",
"1"
],
"default": "0",
"type": "boolean"
},
"smallimage": {
"label": "Small Image (left)",
"suggestedvalues": [
"none"
],
"default": "{{{image}}}",
"type": "content"
},
"smallimageright": {
"label": "Small Image (right)",
"suggestedvalues": [
"none"
],
"default": "{{{imageright}}}",
"type": "content"
},
"smalltext": {
"label": "Small Text",
"default": "{{{text}}}",
"type": "content"
}
}
}
</templatedata><noinclude>
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:TemplateData documentation{{#translation:}}]]
</noinclude>
9df258d03498993e318125a2a2c84537a95b0653
Template:Mbox templates
10
447
1344
1343
2023-06-13T18:15:50Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Mbox_templates]]: w
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{nmbox
| image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]]
| header = {{ll|Template:Mbox|2=<translate><!--T:1--> Message box templates</translate>}}
| text = {{flatlist|1=
* {{tll|ambox}}
* {{tll|cmbox}}
* {{tll|fmbox}}
* {{tll|imbox}}
* {{tll|nmbox}}
* {{tll|ombox}}
* {{tll|tmbox}}
}}
}}</onlyinclude>
[[Category:Navigation templates{{#translation:}}]]
9dc6ee90892df1c583767586088a9a448e0a441c
Template:Mbox templates/en
10
448
1346
1345
2023-06-13T18:15:51Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Mbox_templates/en]]: w
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{nmbox
| image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]]
| header = {{ll|Template:Mbox|2=Message box templates}}
| text = {{flatlist|1=
* {{tll|ambox}}
* {{tll|cmbox}}
* {{tll|fmbox}}
* {{tll|imbox}}
* {{tll|nmbox}}
* {{tll|ombox}}
* {{tll|tmbox}}
}}
}}</onlyinclude>
[[Category:Navigation templates{{#translation:}}]]
d09263a3b65012961144152a83c6a76b403d4e21
Template:\sandbox
10
449
1348
1347
2023-06-13T18:15:53Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:\sandbox]]: w
wikitext
text/x-wiki
<onlyinclude>{{#ifeq:{{SUBPAGENAME}}|sandbox|/sandbox}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
b84c7b18d05a12c4da67f5f1a5e12c4371eea588
Template:Cmbox/doc
10
450
1350
1349
2023-06-13T18:15:55Z
Otonashi Ayana
2
1 revision imported from [[:mw:Template:Cmbox/doc]]: w
wikitext
text/x-wiki
{{Mbox templates}}
{{Documentation subpage}}
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
{{Lua|Module:Message box{{\sandbox}}}}
{{Uses TemplateStyles|Module:Message box/ambox.css}}
This is the {{tl|Cmbox}} (['''C''']ategory ['''m''']essage ['''box''']) metatemplate.
It is used to build message box templates for category pages. It offers several different colours, uses default images if no image parameter is given, and it has some other features.
This template works almost exactly like {{tl|Ambox}} and uses the same parameters.
=== Usage ===
Simple usage example:
<pre>
{{cmbox | text = Some text.}}
</pre>
{{cmbox{{\sandbox}} | text = Some text.}}
Complex example:
<pre>
{{cmbox
| type = style
| image = [[File:Emblem-question-yellow.svg|40px]]
| style = width: 400px;
| textstyle = color: red; font-weight: bold; font-style: italic;
| text = The message body text.
}}
</pre>
{{cmbox{{\sandbox}}
| type = style
| image = [[File:Emblem-question-yellow.svg|40px]]
| style = width: 400px;
| textstyle = color: red; font-weight: bold; font-style: italic;
| text = The message body text.
}}
=== Category message box types ===
The following examples use different '''type''' parameters but use no image parameters, thus they use the default images for each type.
{{cmbox{{\sandbox}}
| type = speedy
| text = type=<u>speedy</u> – Speedy deletion templates such as {{tl|db-c1}}.
}}
{{cmbox{{\sandbox}}
| type = delete
| text = type=<u>delete</u> – Deletion templates such as {{tl|cfd}}.
}}
{{cmbox{{\sandbox}}
| type = content
| text = type=<u>content</u> – Major warnings and problems such as {{tl|Categorization of people disputed}}.
}}
{{cmbox{{\sandbox}}
| type = style
| text = type=<u>style</u> – Minor warnings and problems such as {{tl|Underpopulated category}}.
}}
{{cmbox{{\sandbox}}
| type = notice
| text = type=<u>notice</u> – Notices and messages of any kind, both permanent and temporary.
}}
{{cmbox{{\sandbox}}
| type = move
| text = type=<u>move</u> – Move, merge, and split messages and proposals such as {{tl|Category redirect}}.
}}
{{cmbox{{\sandbox}}
| type = protection
| text = type=<u>protection</u> – Protection templates such as {{tl|pp}} when shown on a category page.
}}
=== Other images ===
The default images shown above are mostly for convenience. In many cases it is more appropriate to use more specific images. These examples use the '''image''' parameter to specify an image other than the default images.
{{cmbox{{\sandbox}}
| type = style
| image = [[File:Sub-arrows.svg|40px]]
| text = type = style<br />image = <nowiki>[[File:Sub-arrows.svg|40px]]</nowiki><br />This image is used for {{tl|Very large}} and {{tl|Category diffuse}}.
}}
{{cmbox{{\sandbox}}
| type = move
| image = [[File:Redirect arrow.svg|52px]]
| text = type = move<br />image = <nowiki>[[File:Redirect arrow.svg|52px]]</nowiki><br />This image is used for {{tl|Category redirect}}.
}}
=== Special ===
Some other parameter combinations.
{{cmbox{{\sandbox}}
| text = No type and no image given ('''default''')
}}
{{cmbox{{\sandbox}}
| image = none
| text = No type and '''image=none''' – No image is used and the '''text''' uses the whole message box area.
}}
{{cmbox{{\sandbox}}
| image = [[File:Gnome globe current event.svg|42px]]
| imageright = [[File:Nuvola apps bookcase.svg|40px]]
| text = image = <nowiki>[[File:Gnome globe current event.svg|42px]]</nowiki><br />imageright = <nowiki>[[File:Nuvola apps bookcase.svg|40px]]</nowiki>
}}
{{cmbox{{\sandbox}}
| image = [[File:Gnome globe current event.svg|42px]]
| imageright = [[File:Shuttle.svg|20px]]
| text = '''This category lists articles about current and recent [[w:Spaceflight|spaceflights]].'''<br />It is populated by the {{tl|Current spaceflight}} template.
}}
=== Parameters ===
List of all parameters:
<pre>
{{cmbox
| type = speedy / delete / content / style / notice / move / protection
| image = none / [[File:Some image.svg|40px]]
| imageright = [[File:Some image.svg|40px]]
| class = A custom CSS class to apply to the box
| style = CSS values
| textstyle = CSS values
| plainlinks = no
| text = The message body text.
}}
</pre>
'''type'''
:If no '''type''' parameter is given, the template defaults to type '''notice'''. That means it gets a blue background.
'''image'''
:'''No parameter''' = If no '''image''' parameter is given, the template uses a default image. Which default image it uses depends on the '''type''' parameter.
:'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size).
::For example: <code><nowiki>image = [[File:Sub-arrows.svg|40px]]</nowiki></code>
:'''none''' = Means that no image is used.
'''imageright'''
:'''No parameter''' = If no '''imageright''' parameter is given, no image is shown on the right side.
:'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size).
::For example: <code><nowiki>imageright = [[File:Nuvola apps bookcase.svg|40px]]</nowiki></code>
:'''Anything''' = Any other object that you want to show on the right side.
'''style'''
:An optional [[w:Cascading Style Sheets|CSS]] value used by the entire message box table. Without quotation marks <code>" "</code>.
::For example: <code>style = margin-bottom: 0.5em;</code>
'''textstyle'''
:An optional [[w:Cascading Style Sheets|CSS]] value used by the text cell.
::For example: <code>textstyle = text-align: center;</code>
'''plainlinks'''
:Normally on Wikipedia, external links have an arrow icon next to them, like this: [http://www.example.com Example.com]. However, in message boxes, the arrow icon is suppressed by default, like this: <span class="plainlinks">[http://www.example.com Example.com]</span>. To get the normal style of external link with the arrow icon, use {{para|plainlinks|no}}.
'''text'''
:The message body text.
=== Technical details ===
If you need to use special characters in the text parameter then you need to escape them like this:
<pre>
{{cmbox
| text = <div>
Equal sign = and a start and end brace { } work fine as they are.
But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>.
And now a pipe and end braces <nowiki>|}}</nowiki>.
</div>
}}
</pre>
{{cmbox{{\sandbox}}
| text = <div>
Equal sign = and a start and end brace { } work fine as they are.
But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>.
And now a pipe and end braces <nowiki>|}}</nowiki>.
</div>
}}
This template uses the cmbox CSS classes in {{Blue|MediaWiki:Common.css}} for most of its looks, thus it is fully skinnable.
Internally this meta-template uses HTML markup instead of wiki markup for the table code. That is the usual way we make meta-templates since wiki markup has several drawbacks. For instance it makes it harder to use [[Help:Extension:ParserFunctions|parser functions]] and special characters in parameters.
The default images for this meta-template are in PNG format instead of SVG format. The main reason is that some older web browsers have trouble with the transparent background that MediaWiki renders for SVG images. The PNG images here have hand-optimised transparent background colour so they look good in all browsers. Note that SVG icons only look somewhat bad in the old browsers, thus such hand optimisation is only worth the trouble for very widely used icons.
For more technical details see the [[Template talk:Cmbox|talk page]]. Since this template works almost exactly like the other mboxes, their talk pages and related pages might also contain more details (see the [[#See also|See also]] section below).
== TemplateData ==
{{Mbox/TemplateData}}
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Mbox templates{{#translation:}}]]
}}</includeonly>
5d5a78d9d3dac08ea8c76d1802b8e71065e9b565
MediaWiki:Common.css
8
7
1351
1235
2023-06-13T18:51:01Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:has(a):hover{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-body{
box-shadow: -21px 21px 10px white;
background-color: white;
}
.mw-dismissable-notice{
display:flex;
flex-direction:row-reverse;
justify-content:center;
align-items:center;
background-color: #F8F9FA;
border:1px solid #A2A9B1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
75ea509548bf6ae1fe59d2f135ef5b8bf4f2bccc
1353
1351
2023-06-13T19:16:10Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:hover .family-name{
text-decoration: underline;
}
.character-name:hover .given-name{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-body{
box-shadow: -21px 21px 10px white;
background-color: white;
}
.mw-dismissable-notice{
display:flex;
flex-direction:row-reverse;
justify-content:center;
align-items:center;
background-color: #F8F9FA;
border:1px solid #A2A9B1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
087f464490fa83bd0d2c829e955a701a91b06c0d
Kara no Shoujo - The Second Episode
0
182
1352
1170
2023-06-13T19:14:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.jpg|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
| prev = {{kns}}
| next = {{kns3}}
}}
'''''Kara no Shōjo — The Second Episode''''', originally released as {{nihongo|'''''Uro no Shōjo'''''|虚ノ少女}} and later released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Premise ==
In late 1957, {{n|Reiji|Tokisaka}} is still no closer to finding {{n|Shinji|Mamiya}} and {{n|Toko|Kuchiki}}. After another string of murders begins in Tokyo that is seemingly tied to the spiritual traditions of an isolated village in rural Japan, Reiji and his newest assistant, {{n|Masaki|Tomoyuki}} set out to solve the case.
== Trivia ==
*{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
968e4b5208b8ad23c31229c0d5f9515d8f2df694
Natsume Takashiro
0
305
1354
940
2023-06-13T19:20:23Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Natsume
| family name = Takashiro
| jname =
| image = [[File:snat0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}.
== Relationships ==
{{family tree}}
{{kns characters}}
{{kns2 characters|state=collapsed}}
661ee174d5e44122d3b22044c5e9b9ce78d8ac47
1371
1354
2023-06-13T21:13:41Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Natsume
| family name = Takashiro
| jname =
| image = [[File:snat0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}} and {{n|Nana|Takashiro}}.
== Relationships ==
{{family tree}}
{{kns characters}}
{{kns2 characters|state=collapsed}}
aacc6bfc84061f3d794edc9f93a68ff537149633
Template:Kns2 characters
10
313
1355
1187
2023-06-13T19:21:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Aoki|Toji}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{n|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Natsume|Takashiro}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
834d931dcfb88e49cf5f070a36db9689a543f12a
File:Aok0102.png
6
451
1356
2023-06-13T19:23:03Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Aoki Toji
0
452
1357
2023-06-13T19:23:38Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Aoki | family name = Toji | jname = 冬史 蒼木 | image = [[File:aok0102.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }} {{cartagra characters}} {{kns2 characters|state=collapsed}}"
wikitext
text/x-wiki
{{infobox character
| given name = Aoki
| family name = Toji
| jname = 冬史 蒼木
| image = [[File:aok0102.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}
{{cartagra characters}}
{{kns2 characters|state=collapsed}}
3d15b784d32d8311a5b6870511ce67a830612a27
1359
1357
2023-06-13T20:57:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Aoki
| family name = Toji
| jname = 冬史 蒼木
| image =
<tabber>
|-| Short Hair= [[File:aok0102.png|x300px]]
|-| Long Hair = [[File:tou100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}
{{cartagra characters}}
{{kns2 characters|state=collapsed}}
9da8484dd160a88bbf07113ed104ba908b49ddf1
1370
1359
2023-06-13T21:12:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Aoki
| family name = Toji
| jname = 冬史 蒼木
| image =
<tabber>
|-| Short Hair= [[File:aok0102.png|x300px]]
|-| Long Hair = [[File:tou100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}{{nihongo|'''{{c}}'''|冬史 蒼木}} is a drifter who was once a high-ranking member of an underworld organization called the "Hand of Death" in Ueno. She is an old friend of {{n|Shugo|Takashiro}}. She lost her left arm when she was younger.
{{cartagra characters}}
{{kns2 characters|state=collapsed}}
9d6dbabe799a1bef0a41a445c2b6df84e32334a3
File:Tou100a.png
6
453
1358
2023-06-13T20:57:29Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Tok100a.png
6
454
1360
2023-06-13T20:58:33Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Tokiko Shigusa
0
455
1361
2023-06-13T21:01:39Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Tokiko | family name = Shigusa | jname = 祠草 時子 | image = [[File:tok100a.png|x300px]] | aka = The Holy Prophet | gender = Female | age = | appearance = {{cartagra}} | seiyu = {{o|Rei|Hikura}} }}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoilers|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years pri..."
wikitext
text/x-wiki
{{infobox character
| given name = Tokiko
| family name = Shigusa
| jname = 祠草 時子
| image = [[File:tok100a.png|x300px]]
| aka = The Holy Prophet
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu = {{o|Rei|Hikura}}
}}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoilers|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}.
{{cartagra characters}}
7a4e0d52771daa582ef2d2f3d0dca11a56ddbd42
1362
1361
2023-06-13T21:02:04Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Tokiko
| family name = Shigusa
| jname = 祠草 時子
| image = [[File:tok100a.png|x300px]]
| aka = The Holy Prophet
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu = {{o|Rei|Hikura}}
}}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoilers|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}. }}
{{cartagra characters}}
8b847ba0bc39948682f3e17c9ec871cb3191def8
1363
1362
2023-06-13T21:02:38Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Tokiko
| family name = Shigusa
| jname = 祠草 時子
| image = [[File:tok100a.png|x300px]]
| aka = The Holy Prophet
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu = {{o|Rei|Hikura}}
}}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoiler|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}. }}
{{cartagra characters}}
74184a88d2877e973e7f45354bdd9195df888dc1
1364
1363
2023-06-13T21:05:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Tokiko
| family name = Shigusa
| jname = 祠草 時子
| image = [[File:tok100a.png|x300px]]
| aka = The Holy Prophet
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu = {{o|Rei|Hikura}}
}}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoiler|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}. }}
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}
{{cartagra characters}}
f24bc8cb8b2feda177161810b471f01b8594f13d
Tokiko Shigusa/Family tree
0
456
1365
2023-06-13T21:06:02Z
Otonashi Ayana
2
Created page with "{{Tree chart/start|align=center}} {{Tree chart| Mch | Mch = Michio }} {{Tree chart| |!| |}} {{Tree chart| Tok | Tok = {{charbox|Tokiko|119px|link=Tokiko Shigusa}}}} {{Tree chart/end}}"
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| Mch
| Mch = Michio }}
{{Tree chart| |!| |}}
{{Tree chart| Tok
| Tok = {{charbox|Tokiko|119px|link=Tokiko Shigusa}}}}
{{Tree chart/end}}
81da37cada0edc7e135d6782ef22fa76677a23b8
1366
1365
2023-06-13T21:07:13Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Tree chart/start|align=center}}
{{Tree chart| |!| }}
{{Tree chart| Mch
| Mch = Michio }}
{{Tree chart| |!| |}}
{{Tree chart| Tok
| Tok = {{charbox|Tokiko|119px|link=Tokiko Shigusa}}}}
{{Tree chart/end}}
91559e41c3a024b87d48db81c86b0de8d2b72e3a
Template:Cartagra characters
10
201
1367
1110
2023-06-13T21:08:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Yukishiro
| list2 =
* [[Ujaku]]
* [[Rin]]
* [[Otoha]]
* [[Koyuki]]
* [[Seri]]
| group3 = Other
| list3 =
* {{n|Kazuna|Kozuki}}
* {{n|Yura|Kozuki}}
* {{n|Nana|Takashiro}}
* {{n|Takako|Ayasaki}}
* {{n|Kaori|Fukamizu}}
* {{n|Tokiko|Shigusa}}
* {{n|Akao|Ikuma}}
* {{n|Daisaku|Arata}}
}}<includeonly>
[[Category:Cartagra]]
[[Category:Characters]]
</includeonly>
1c9efde5eff1fc650acfb3db97cb0fae00e26bbe
1369
1367
2023-06-13T21:09:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Yukishiro
| list2 =
* [[Ujaku]]
* [[Rin]]
* [[Otoha]]
* [[Koyuki]]
* [[Seri]]
| group3 = Other
| list3 =
* {{n|Kazuna|Kozuki}}
* {{n|Yura|Kozuki}}
* {{n|Nana|Takashiro}}
* {{n|Takako|Ayasaki}}
* {{n|Kaori|Fukamizu}}
* {{n|Tokiko|Shigusa}}
* {{n|Akao|Ikuma}}
* {{n|Daisaku|Arata}}
}}<includeonly>
[[Category:Characters]]
[[Category:Cartagra]]
</includeonly>
a352c4ec90b571983cdce200565c4c7cc43c2e71
Category:Pages using Tabber parser tag
14
457
1368
2023-06-13T21:09:13Z
Otonashi Ayana
2
Created page with "__HIDDENCAT__"
wikitext
text/x-wiki
__HIDDENCAT__
183b9c38bff80327776bd180634fccfd19cf616f
File:Kar0701.png
6
323
1372
1012
2023-06-13T21:16:14Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Kar0701.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Kar0501.png
6
458
1373
2023-06-13T21:17:05Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Karen Hinagami
0
322
1374
1213
2023-06-13T21:17:08Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hingami
| jname =
| image =
<tabber>
|-| Adult = [[File:kar0701.png|x300px]]
|-| Teenager = [[File:kar0501.png|x300px]]
</tabber>
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko" that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family.
In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting.
Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
31c63a0bb0556e7edcc3981dbbb1c8d21b0decfc
Hitogata
0
459
1375
2023-06-13T21:38:56Z
Otonashi Ayana
2
Created page with "'''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led through a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are he..."
wikitext
text/x-wiki
'''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led through a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are heirs to the Hinagami family are set up to marry a designated "Miko," a girl who is trained by the Shigusa family to continue the village's traditions. {{spoiler|kns2|In truth, these two families are incestuously intertwined; the Miko is always a part of the Shigusa family herself, hidden away from the rest of the village at birth and reintroduced upon reaching maturity as being an enigmatic "guest" of Hitogata.}}
== See also ==
* [[Hinagami-Shigusa family tree]]
{{kns2/cat}}
e3e8f71a882fe17c3d4fa4c97d6642bf2fbe4d98
1376
1375
2023-06-13T21:39:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
'''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led through a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are heirs to the Hinagami family are set up to marry a designated "Miko," a girl who is trained by the Shigusa family to carry on the village's traditions. {{spoiler|kns2|In truth, these two families are incestuously intertwined; the Miko is always a part of the Shigusa family herself, hidden away from the rest of the village at birth and reintroduced upon reaching maturity as being an enigmatic "guest" of Hitogata.}}
== See also ==
* [[Hinagami-Shigusa family tree]]
{{kns2/cat}}
c43e4a77860c8a58920dee04552f5d2571c6b041
1377
1376
2023-06-13T22:04:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
'''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led by a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are heirs to the Hinagami family are set up to marry a designated "Miko," a girl who is trained by the Shigusa family to carry on the village's traditions. {{spoiler|kns2|In truth, these two families are incestuously intertwined; the Miko is always a part of the Shigusa family herself, hidden away from the rest of the village at birth and reintroduced upon reaching maturity as being an enigmatic "guest" of Hitogata.}}
== See also ==
* [[Hinagami-Shigusa family tree]]
{{kns2/cat}}
443634018f04cf0376dda834297a94e9445ce7c2
Fuyumi Kayahara
0
314
1378
965
2023-06-13T23:49:02Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}}
== Plot ==
Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately meet and fall in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family.
In 1940, in the days leading up to the village's annual festival, Satsuki makes plans to see Ayato. However, Ayako secretly changes the date of the meeting and meets with Ayato in an abandoned cabin, where the two have sex. After the festival, Satsuki learns of what happened and attempts to murder Ayako. However, Ayako manages to overpower her and strangles Satsuki to death. The panicked Ayako is found by {{n|Kensei|Shigusa}}, who then helps Ayako escape the village. {{n|Saya|Shigusa}} discovers Satsuki's corpse and stages her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine.
Ayako adopts the name Fuyumi Kayahara and begins a new life in Tokyo. She is approached by a new-age religious cult called the [[Blessed Congregation]] and is given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation will provide Fuyumi with a monetary reward when they return to collect Yukiko after reaching adulthood.
{{kns2 characters}}
c7979c6f510b7e94ea107f38fadaebb247c1088f
1379
1378
2023-06-13T23:52:39Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}}
== Plot ==
Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family.
In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine.
Ayako went on to adopt the name Fuyumi Kayahara and begin a new life in Tokyo. She was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood.
{{kns2 characters}}
52b14e00b61fa77b9ba076232fd1b379eb6d8038
1381
1379
2023-06-13T23:55:45Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:fuy0301.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}}
== Plot ==
Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family.
In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine.
Ayako went on to adopt the name Fuyumi Kayahara and begin a new life in Tokyo. She was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood.
{{kns2 characters}}
79deac579e3e7d40172d3392273310eb0c8772ae
File:Fuy0301.png
6
460
1380
2023-06-13T23:55:09Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Template:Location
10
461
1382
2023-06-13T23:57:48Z
Otonashi Ayana
2
Created page with "{{subpage|List of locations}}<includeonly>[[Category:Locations]]</includeonly>"
wikitext
text/x-wiki
{{subpage|List of locations}}<includeonly>[[Category:Locations]]</includeonly>
06777bcbcc2ac07fe05c3c5c08fc39754d0ab7cb
Ouba Private Girls' Academy
0
275
1383
817
2023-06-13T23:58:02Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{location}}[[File:academy front.png|thumb|The exterior of the Academy]]'''{{PAGENAME}}''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]].
=== Known Students ===
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tori|Kohane}}
* {{n|Ayumu|Sato}}
* {{n|Orihime|Tsukishime}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Yui|Nishizono}}
* {{n|Haruka|Imamura}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takigawa}}
=== Known Faculty ===
* {{n|Tokio|Saeki}}
* {{n|Tatsuhiko|Kusaka}}
* {{n|Nene|Akazaki}}
* {{n|Reiji|Tokisaka}} (temporary)
3165ef9ee9ba091f13b4c7fc6b6e05edf1f84936
File:Nursery interior.png
6
462
1384
2023-06-14T00:04:20Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
New Leaf Garden
0
463
1385
2023-06-14T00:05:55Z
Otonashi Ayana
2
Created page with "{{location}}[[File:nursery interior.png|thumb]]The '''New Leaf Garden''' is a nursery owned by the [[Blessed Congregation]] that was created after the dissolution of the [[White Lily Garden]] orphanage. {{n|Fuyumi|Kayahara}} and {{n|Nanako|Sawashiro}} work at the nursery."
wikitext
text/x-wiki
{{location}}[[File:nursery interior.png|thumb]]The '''New Leaf Garden''' is a nursery owned by the [[Blessed Congregation]] that was created after the dissolution of the [[White Lily Garden]] orphanage. {{n|Fuyumi|Kayahara}} and {{n|Nanako|Sawashiro}} work at the nursery.
486be7ff1a3d06e2da00937323b4db160b60f69f
1386
1385
2023-06-14T00:06:28Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{location}}[[File:nursery interior.png|thumb|The interior of the nursery]]The '''New Leaf Garden''' is a nursery owned by the [[Blessed Congregation]] that was created after the dissolution of the [[White Lily Garden]] orphanage. {{n|Fuyumi|Kayahara}} and {{n|Nanako|Sawashiro}} work at the nursery.
bcc2b8fac2b29d971308c6c8dc54af4820ca3507
Template:Minor
10
464
1387
2023-06-14T00:15:38Z
Otonashi Ayana
2
Created page with "{{#switch: {{{1}}} | cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns = {{#if:{{{3|}}}|[[List of minor characters in {{kns|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns2 = {{#if:{{{3|}}}|[[List of minor characters in {{kns2|n}}#{{{2}}}|{{{2}}}]]|List of minor c..."
wikitext
text/x-wiki
{{#switch: {{{1}}}
| cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
| kns = {{#if:{{{3|}}}|[[List of minor characters in {{kns|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
| kns2 = {{#if:{{{3|}}}|[[List of minor characters in {{kns2|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns2|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
| kns3 = {{#if:{{{3|}}}|[[List of minor characters in {{kns3|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns3|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
}}
d86dea3f969378d2f3297801de11cd38987c1e28
1388
1387
2023-06-14T00:18:56Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#switch: {{{1}}}
| cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
| kns = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo#{{{2}}}|{{{2}}}]]|[[List of minor characters in Kara no Shoujo#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
| kns2 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}|{{{2}}}]]|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
| kns3 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}|{{{2}}}]]|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}}
}}
dd010cbc8d9815abf709761a261f1541cbc955fc
1389
1388
2023-06-14T00:20:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#switch: {{{1}}}
| cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]}}
| kns = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Kara no Shoujo#{{{2}}}|{{{2}}}]]}}
| kns2 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}|{{{2}}}]]}}
| kns3 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}|{{{2}}}]]}}
}}
2b7d49f9dc7e9d4bdd90be737b8cf5f0340480ac
List of minor characters in Kara no Shoujo - The Second Episode
0
465
1390
2023-06-14T00:22:24Z
Otonashi Ayana
2
Created page with "{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== {{kns2 characters}}"
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}}
==== Saizo Kuki ====
{{kns2 characters}}
944b2360364206448032ca76acdb9b5c6a4dcc2f
1394
1390
2023-06-14T00:29:40Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}}
==== Saizo Kuki ====
==== Yayoi Shigusa ====
<div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]]
{{nihongo|'''{{o|Yayoi|Shigusa}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}.
</div>
{{kns2 characters}}
418e04069db17f120be640ee5b62b89909beb0f2
1396
1394
2023-06-14T00:32:06Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}}
==== Saizo Kuki ====
<div style="clear:both">
{{nihongo|'''{{o|Saizo|Kuki}}'''|犀造 九鬼}} is a resident of the [[Hitogata]] settlement, working at the branch office.
</div>
==== Yayoi Shigusa ====
<div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]]
{{nihongo|'''{{o|Yayoi|Shigusa}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}.
</div>
{{kns2 characters}}
da3800d80ec5ff5074ff74feca8252e8332ae6a2
1397
1396
2023-06-14T00:32:14Z
Otonashi Ayana
2
/* Saizo Kuki */
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}}
==== Saizo Kuki ====
<div style="clear:both">
{{nihongo|'''{{o|Saizo|Kuki}}'''|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office.
</div>
==== Yayoi Shigusa ====
<div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]]
{{nihongo|'''{{o|Yayoi|Shigusa}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}.
</div>
{{kns2 characters}}
bcf2fb892ae6723d769b35c0d0f4037bccc4ee35
1398
1397
2023-06-14T00:32:49Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}}
==== Saizo Kuki ====
<div style="clear:both">
{{nihongo|{{o|Saizo|Kuki}}|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office.
</div>
==== Yayoi Shigusa ====
<div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]]
{{nihongo|{{o|Yayoi|Shigusa}}|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}.
</div>
{{kns2 characters}}
15bea866fb0180bb5f5327cf91a9103d2a6c8ef1
Template:Kns2 characters
10
313
1391
1355
2023-06-14T00:22:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Aoki|Toji}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{n|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{n|Miya|Shigusa}}
* {{n|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{n|Shinobu|Takayama}}
* {{minor|kns2|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Natsume|Takashiro}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
e08e60e4ef608d33a1ecfcabd7ed739ba07da897
1392
1391
2023-06-14T00:24:51Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Aoki|Toji}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{minor|kns2|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{minor|kns2|Miya|Shigusa}}
* {{minor|kns2|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{minor|kns2|Shinobu|Takayama}}
* {{minor|kns2|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Natsume|Takashiro}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Bunji|Inui}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
1165a2b25dd2c3939c805b21eb9531c74efa25e5
1416
1392
2023-06-14T00:59:40Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Aoki|Toji}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Bunji|Inui}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{minor|kns2|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{minor|kns2|Miya|Shigusa}}
* {{minor|kns2|Yayoi|Shigusa}}
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{minor|kns2|Shinobu|Takayama}}
* {{minor|kns2|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Natsume|Takashiro}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
8bd96b38f4dea2b457635e31cde52d88e416f76e
File:Yay0201.png
6
466
1393
2023-06-14T00:25:58Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Yayoi Shigusa
0
380
1395
1130
2023-06-14T00:30:07Z
Otonashi Ayana
2
Redirected page to [[List of minor characters in Kara no Shoujo - The Second Episode#Yayoi Shigusa]]
wikitext
text/x-wiki
#REDIRECT [[List of minor characters in Kara no Shoujo - The Second Episode#Yayoi Shigusa]]
7f4a63d1d18f9ad1ed3e8084618a1ec1b2d921e3
MediaWiki:Common.css
8
7
1399
1353
2023-06-14T00:34:50Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:hover .family-name{
text-decoration: underline;
}
.character-name:hover .given-name{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-parser-output{
box-shadow: -10px 0 10px white;
background-color: white;
}
.mw-dismissable-notice{
display:flex;
flex-direction:row-reverse;
justify-content:center;
align-items:center;
background-color: #F8F9FA;
border:1px solid #A2A9B1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
441d3da5fbc686b48f1ec8c53ae737d2f1ec2473
1400
1399
2023-06-14T00:36:46Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:hover .family-name{
text-decoration: underline;
}
.character-name:hover .given-name{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-parser-output{
box-shadow: -10px 10px 10px white;
background-color: white;
}
.mw-dismissable-notice{
display:flex;
flex-direction:row-reverse;
justify-content:center;
align-items:center;
background-color: #F8F9FA;
border:1px solid #A2A9B1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
65095b258ea4c4faf450bce9fb0c9260adc460c8
Kara no Shoujo 2
0
467
1401
2023-06-14T00:37:50Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo - The Second Episode]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo - The Second Episode]]
dd2def2cf3420d38903a7328d20e368f2d71c976
Uro no Shoujo
0
468
1402
2023-06-14T00:38:20Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo - The Second Episode]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo - The Second Episode]]
dd2def2cf3420d38903a7328d20e368f2d71c976
Ama no Shoujo
0
469
1403
2023-06-14T00:38:35Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo - The Last Episode]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo - The Last Episode]]
aeca3ca6670ab0bbbd03c23b2ce7be53685bab00
Kara no Shoujo 3
0
470
1404
2023-06-14T00:38:50Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo - The Last Episode]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo - The Last Episode]]
aeca3ca6670ab0bbbd03c23b2ce7be53685bab00
The Shell Part III
0
471
1405
2023-06-14T00:39:40Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo - The Last Episode]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo - The Last Episode]]
aeca3ca6670ab0bbbd03c23b2ce7be53685bab00
The Shell Part I
0
472
1406
2023-06-14T00:40:02Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo]]
0bf375957100375d059b3b83ab5cc9da24088021
The Shell Part II
0
473
1407
2023-06-14T00:40:45Z
Otonashi Ayana
2
Redirected page to [[Kara no Shoujo - The Second Episode]]
wikitext
text/x-wiki
#REDIRECT [[Kara no Shoujo - The Second Episode]]
dd2def2cf3420d38903a7328d20e368f2d71c976
File:Smiy0101a.png
6
474
1408
2023-06-14T00:43:47Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Yukiko Miyama
0
475
1409
2023-06-14T00:46:14Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Yukiko | family name = Miyama | jname = 深山 由紀子 | image = [[File:smiya0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Hikaru|Isshiki}} }}{{nihongo|'''{{c}}'''|深山 由紀子}} is the late fiancée of {{n|Reiji|Tokisaka}}. She was murdered by {{n|Makoto|Rokushiki}}, the final victim of his killing spree before his disappearance. {{kns charact..."
wikitext
text/x-wiki
{{infobox character
| given name = Yukiko
| family name = Miyama
| jname = 深山 由紀子
| image = [[File:smiya0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu = {{o|Hikaru|Isshiki}}
}}{{nihongo|'''{{c}}'''|深山 由紀子}} is the late fiancée of {{n|Reiji|Tokisaka}}. She was murdered by {{n|Makoto|Rokushiki}}, the final victim of his killing spree before his disappearance.
{{kns characters}}
f0e597177760b07cc7b346b586fff7b26b1281b1
1410
1409
2023-06-14T00:47:26Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Yukiko
| family name = Miyama
| jname = 深山 由紀子
| image = [[File:smiy0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu = {{o|Hikaru|Isshiki}}
}}{{nihongo|'''{{c}}'''|深山 由紀子}} is the late fiancée of {{n|Reiji|Tokisaka}}. She was murdered by {{n|Makoto|Rokushiki}}, the final victim of his killing spree before his disappearance.
{{kns characters}}
db5005c3c2a98218141313a830a55a032e211325
File:Rok0101.png
6
393
1411
1188
2023-06-14T00:49:18Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Rok0101.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Makoto Rokushiki
0
394
1412
1205
2023-06-14T00:50:32Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Makoto
| family name = Rokushiki
| jname = 六識 命
| image = [[File:rok0101.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer.
== Plot ==
Though primarily a psychiatrist, Makoto is an extremely talented doctor with a wide array of medical knowledge in countless fields. After World War II, he spent his time curing people on the streets, finding passion in saving others. However, he had a spiritual crisis when a pregnant prostitute asked him for an abortion, an act he disagreed with as a devout Catholic. He performed the surgery, however he fed the prostitute a poisoned drink afterwards, killing her as a form of religious revenge. In doing so, Makoto slipped into madness and came to believe it was his duty to dispense justice to those who violated the "sacred right to life." He crucified the prostitute on a cross and then murdered five more women in the same manner, all of whom were consdering abortion. Among these victims were {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}.
After Makoto's girlfriend, {{minor|kns|Celestial|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death. Seeking some sort of penance for failing to save her, Makoto devoted his time to curing Celestial's sister, {{n|Maris|Stella}}, of her muteness.
Makoto was romantically involved with his sister, {{n|Misa|Rokushiki}}, however he has a testicular disease that has rendered him infertile. As such, he believes that Misa's daughter, {{n|Toko|Kuchiki}}, was a result of parthenogenesis and does not consider himself to be her father.
== Trivia ==
* Makoto has [[w:situs inversus|situs inversus]]; if Reiji tries to shoot him in the heart at the end of {{kns}}, Makoto survives as his heart is on the opposite side of his body.
{{kns characters}}
{{kns2 characters|state=collapsed}}
fac1bbd8a8219b60fd48a81ca9a14214cf9204d1
File:Celes pendant.png
6
476
1413
2023-06-14T00:53:17Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
List of minor characters in Kara no Shoujo
0
477
1414
2023-06-14T00:55:44Z
Otonashi Ayana
2
Created page with "{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo''}} ==== Celestial Stella ==== <div style="clear:both">[[File:celes pendant.png|thumb|left|upright=0.5]] {{o|Celestial|Stella}} is the twin sister of {{n|Maris|Stella}} and late girlfriend of {{n|Makoto|Rokushiki}}. She died of degenerative disease that slowly paralyzed her. A photograph of her can be found in a pendant given to Maris by Makoto. </div> {{kns characters}}"
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo''}}
==== Celestial Stella ====
<div style="clear:both">[[File:celes pendant.png|thumb|left|upright=0.5]]
{{o|Celestial|Stella}} is the twin sister of {{n|Maris|Stella}} and late girlfriend of {{n|Makoto|Rokushiki}}. She died of degenerative disease that slowly paralyzed her. A photograph of her can be found in a pendant given to Maris by Makoto.
</div>
{{kns characters}}
8542581f04ce865233f8ffd7363cf775fdc53b49
Ryoichi Yaginuma
0
203
1415
881
2023-06-14T00:58:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Ryoichi
| family name = Yaginuma
| jname =
| image =
| aka =
| gender =
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement from the police force. He takes on a greater role in {{kns}}, where he has since become a founding member of the [[w:National Police Agency (Japan)|NPA]].
== Plot ==
Yaginuma was a frequent patron of the [[Yukishiro]] brothel, with a preference for seeing [[Otoha]]. {{spoiler|cartagra|He plays a pivotal role in the arrest of {{n|Kazuma|Arishima}} after being convinced of his guilt by {{n|Shugo|Takashiro}}.}}
{{cartagra characters|state=collapsed}}
{{kns characters}}
{{kns2 characters|state=collapsed}}
380b99819178367ce462227e2be0aa32a82d26ff
File:Kay0101.png
6
478
1417
2023-06-14T01:01:02Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Yukiko Kayahara
0
381
1418
1132
2023-06-14T01:01:05Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Yukiko
| family name = Kayahara
| jname = 茅原 雪子
| image = [[File:kay0101.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends.
== Plot ==
Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality.
Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs Kyoko in [[Moon World]] but flees upon seeing her blood.
A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}.
}}
{{kns2 characters}}
9b737cebc1273c54a65aa72ac5429aa5a6644b4a
File:Nao0101.png
6
479
1419
2023-06-14T01:03:40Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Nao0301.png
6
480
1420
2023-06-14T01:03:43Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Naori Kuroya
0
481
1421
2023-06-14T01:08:08Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Naori | family name = Kuroya | jname = | image = <tabber> |-| Adult = [[File:nao0301.png|x300px]] |-| Teenager = [[File:nao0101.png|x300px]] </tabber> | aka = | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement and the on-call doctor for the [[Blessed Congregation]] == Plot == {{spoiler|kns2|When {{n|Nanako|Sawashiro}} moves t..."
wikitext
text/x-wiki
{{infobox character
| given name = Naori
| family name = Kuroya
| jname =
| image =
<tabber>
|-| Adult = [[File:nao0301.png|x300px]]
|-| Teenager = [[File:nao0101.png|x300px]]
</tabber>
| aka =
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement and the on-call doctor for the [[Blessed Congregation]]
== Plot ==
{{spoiler|kns2|When {{n|Nanako|Sawashiro}} moves to Tokyo and murders her father, Naori helps dispose of his corpse by taking the body to the Tama mountains. When Naori meets {{n|Shinji|Mamiya}}, he assists in caring for the pregnant {{n|Toko|Kuchiki}} until she eventually dies in childbirth. After this, Naori murders Shinji with an axe and buries his corpse, along with Toko's. He sends a manuscript titled ''[[The Sheep of Purgatorio]]'' to publishers in Tokyo under Shinji's name, which is subsequently published.}}
{{kns2 characters}}
82dc6f2b81d3b3a8e93405331c7031065448ffcd
Blessed Congregation
0
295
1422
916
2023-06-14T01:11:05Z
Otonashi Ayana
2
/* Senri */
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
=== Congregation of the Blessed ===
The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}.
=== Senri ===
After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him.
After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction.
=== Blessed Congregation ===
=== Known Members ===
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
a0efb0850822a2c16b4412b452d2220ed81615d7
Yukiko Kayahara
0
381
1423
1418
2023-06-14T01:13:37Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Yukiko
| family name = Kayahara
| jname = 茅原 雪子
| image = [[File:kay0101.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends.
== Plot ==
Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality.
Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs Kyoko in [[Moon World]] but flees upon seeing her blood.
A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}.
}}
<hr>
;Alternate endings
:If Reiji fails to stop Yukiko from killing Yukari, she adopts Yukari's personality. Upon being arrested, she is not found sane enough to stand trial and is hospitalized at the [[Kuchiki Hospital]]. When Reiji visits her, he finds that she has cut her hair to match Yukari's.
{{kns2 characters}}
f99e05ec629fe27895dfb41c8ba2276015a64192
Ayumu Sato
0
302
1424
1105
2023-06-14T01:15:06Z
Otonashi Ayana
2
/* Trivia */
wikitext
text/x-wiki
{{infobox character
| given name = Ayumu
| family name = Sato
| jname =
| image = [[File:sayu0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}.
== Trivia ==
*Ayumu is notably tall. She is described as being nearly as tall as {{n|Reiji|Tokisaka}} and her sprite art shows her as taller than most other characters.
*Ayumu is a possible romantic option in {{kns2}}, however pursuing her with prevent the player from reaching the True End.
{{kns characters}}
{{kns2 characters|state=collapsed}}
2a0b342f8fa131a9e87d528ab7dd20035ae513e1
1425
1424
2023-06-14T01:15:54Z
Otonashi Ayana
2
/* Trivia */
wikitext
text/x-wiki
{{infobox character
| given name = Ayumu
| family name = Sato
| jname =
| image = [[File:sayu0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}.
== Trivia ==
*Ayumu is notably tall. She is described as being nearly as tall as {{n|Reiji|Tokisaka}} and her sprite art shows her as taller than most other characters.
{{spoiler|kns2|Ayumu is a possible romantic option in {{kns2}}, however pursuing her will prevent the player from reaching the True End.|bullet=yes}}
{{kns characters}}
{{kns2 characters|state=collapsed}}
3b284a7ed6a3cfed4442c3bb6b6f00074e0f7667
Yukio
0
482
1426
2023-06-14T17:11:44Z
Otonashi Ayana
2
Redirected page to [[List of minor characters in Kara no Shoujo - The Second Episode]]
wikitext
text/x-wiki
#REDIRECT [[List of minor characters in Kara no Shoujo - The Second Episode]]
4d4c0302767ee98df243f68d004cc55be7184537
1427
1426
2023-06-14T17:12:42Z
Otonashi Ayana
2
Changed redirect target from [[List of minor characters in Kara no Shoujo - The Second Episode]] to [[List of minor characters in Kara no Shoujo - The Second Episode#Yukio]]
wikitext
text/x-wiki
#REDIRECT [[List of minor characters in Kara no Shoujo - The Second Episode#Yukio]]
929c6046e22a498be1583e4de15631601ae4bba2
List of minor characters in Kara no Shoujo - The Second Episode
0
465
1428
1398
2023-06-14T17:14:07Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}}
==== Saizo Kuki ====
<div style="clear:both">
{{nihongo|{{o|Saizo|Kuki}}|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office.
</div>
==== Yayoi Shigusa ====
<div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]]
{{nihongo|{{o|Yayoi|Shigusa}}|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}.
</div>
==== Yukio ====
<div style="clear:both">[[File:head_Yukio.png|thumb|left|upright=0.5]]
Yukio is {{n|Yukiko|Kayahara}}'s brother. While the two were living in the [[White Lily Garden]] orphanage, Yukiko murdered him in hopes to "become" him.
</div>
{{kns2 characters}}
577dafe9ff55084057e403bc0a9674e05a174a09
1429
1428
2023-06-14T17:16:20Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}}
==== Saizo Kuki ====
<div style="clear:both">
{{nihongo|{{o|Saizo|Kuki}}|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office.
</div>
<div style="clear:both">
==== Yayoi Shigusa ====
[[File:head_Yayoi.png|thumb|left|upright=0.5]]
{{nihongo|{{o|Yayoi|Shigusa}}|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}.
</div>
<div style="clear:both">
==== Yukio ====
[[File:head_Yukio.png|thumb|left|upright=0.5]]
Yukio is {{n|Yukiko|Kayahara}}'s brother. While the two were living in the [[White Lily Garden]] orphanage, Yukiko murdered him in hopes to "become" him.
</div>
{{kns2 characters}}
a01e55a55de1a7f062c157a5a530162d3dd36adc
Toko Kuchiki
0
273
1430
980
2023-06-14T18:58:15Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Toko
| family name = Kuchiki
| jname =
| image = [[File:shuy0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''' is an enigmatic girl who attends [[Ouba Private Girls' Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens.
== Plot ==
Toko approaches {{n|Reiji|Tokisaka}} after he begins his undercover investigation at Ouba Private Girls' Academy, having learned that Reiji was a detective through his younger sister, Toko's friend {{n|Yukari|Tokisaka}}. Toko gives Reiji a case: to find her true self.
{{spoiler|kns2|Toko's corpse is found behind a villa in the mountains of Tama, alongside the corpses of {{o|Ginji|Sawashiro}} and Shinji. A makeshift infirmary inside the villa reveals that Toko had died after giving birth. Toko briefly reappears in {{kns2}}, in the alternate "Obsession End." While searching the mountains of Tama, Reiji slips and falls. It is unclear whether this incapacitates him or kills him. Reiji goes on to experience an elaborate fantasy wherein Toko is alive; the two begin a relationship and eventually get married as the screen fades to white.}}
{{kns characters}}
bdd3c1fe2cea6659ed03ac989695268e128f9a5d
Saya Shigusa
0
483
1431
2023-06-14T19:13:00Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Saya | family name = Shigusa | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == Saya is a former Miko. She gives birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}. == Trivia == {{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the cor..."
wikitext
text/x-wiki
{{infobox character
| given name = Saya
| family name = Shigusa
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
Saya is a former Miko. She gives birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}.
== Trivia ==
{{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the corpses of Rika and Satsuki, she stores their limbs in boxes she keeps in the basement beneath the Shigusa shrine storehouse. On a second playthrough of {{kns2|n}}, a scene depicts Saya using one of Satsuki's dismembered arms to masturbate.|bullet=yes}}
{{kns2 characters}}
f382a95ccec3bbe2e5156d861a770a7fc85ddc5d
1432
1431
2023-06-14T19:14:12Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Saya
| family name = Shigusa
| jname =
| image = [[File:|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
Saya is a former Miko. She gave birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}.
== Trivia ==
{{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the corpses of Rika and Satsuki, she stores their limbs in boxes she keeps in the basement beneath the Shigusa shrine storehouse. On a second playthrough of {{kns2|n}}, a scene depicts Saya using one of Satsuki's dismembered arms to masturbate.|bullet=yes}}
{{kns2 characters}}
e8e4bfd64a6c3ae1ff19eab3d3fc440977fb84b5
Ayako
0
484
1433
2023-06-14T19:14:44Z
Otonashi Ayana
2
Redirected page to [[Fuyumi Kayahara]]
wikitext
text/x-wiki
#REDIRECT [[Fuyumi Kayahara]]
9f6af3aa791053108329757dbb2e5a7ade16e0c0
Template:Kns2 characters
10
313
1434
1416
2023-06-14T19:20:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Aoki|Toji}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Bunji|Inui}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{minor|kns2|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{minor|kns2|Miya|Shigusa}}
* {{minor|kns2|Yayoi|Shigusa}}
* [[Fuyumi Kayahara|Ayako]]
* [[Satsuki]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{minor|kns2|Shinobu|Takayama}}
* {{minor|kns2|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Natsume|Takashiro}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
677e1d9646297635c55086720417e27320532965
1435
1434
2023-06-14T19:21:32Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Aoki|Toji}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Bunji|Inui}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{minor|kns2|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{minor|kns2|Miya|Shigusa}}
* {{minor|kns2|Yayoi|Shigusa}}
* [[Satsuki]]
* [[Fuyumi Kayahara|Ayako]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{minor|kns2|Shinobu|Takayama}}
* {{minor|kns2|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Natsume|Takashiro}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
a46acd1846567961f8aa12f776e1e9c359b23192
1470
1435
2023-06-15T01:14:26Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns2 characters
| title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Masaki|Tomoyuki}}
* {{n|Aoki|Toji}}
* {{n|Ryoichi|Yaginuma}}
* {{n|Bunji|Inui}}
| group2 = Students
| list2 =
* {{n|Yukari|Tokisaka}}
* {{n|Yukiko|Kayahara}}
* {{n|Kohane|Tori}}
* {{n|Ayumu|Sato}}
| group4 = Hitogata Residents
| list4 =
{{Navbox|child
| group1 = Hinagami family
| list1 =
* [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]]
* {{n|Karen|Hinagami}}
* {{n|Shizuru|Hinagami}}
* {{n|Hideomi|Hinagami}}
* {{n|Mariko|Hinagami}}
| group2 = Shigusa family
| list2 =
* {{n|Saya|Shigusa}}
* {{n|Yoshimitsu|Shigusa}}
* {{minor|kns2|Rioko|Shigusa}}
* {{n|Kensei|Shigusa}}
* {{minor|kns2|Miya|Shigusa}}
* {{minor|kns2|Yayoi|Shigusa}}
* [[Satsuki]]
* [[Fuyumi Kayahara|Ayako]]
| group3 = Other
| list3 =
* {{n|Naori|Kuroya}}
* {{n|Yuzuru|Kuroya}}
* {{n|So|Kuroya}}
* {{n|Yu|Futami}}
* {{n|Yoshie|Futami}}
* {{n|Nanako|Sawashiro}}
* {{n|Meguri|Takamiya}}
* {{n|Yuka|Kirimura}}
* {{minor|kns2|Shinobu|Takayama}}
* {{minor|kns2|Saizo|Kuki}}
}}
| group5 = Other
| list5 =
* {{n|Fuyumi|Kayahara}}
* {{n|Koharu|Yamanouchi}}
* {{n|Natsume|Takashiro}}
* {{n|Kyoko|Hazuki}}
* {{n|Fumiya|Kuchiki}}
* {{n|Chizuru|Kuchiki}}
* {{n|Daisaku|Arata}}
}}
<includeonly>
[[Category:Characters]]
{{kns2/cat}}
</includeonly>
b8732b9fe168abea0e8760dccc901d02d6941e85
Fuyumi Kayahara
0
314
1436
1381
2023-06-14T19:24:39Z
Otonashi Ayana
2
/* Plot */
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:fuy0301.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}}
== Plot ==
Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family.
In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine.
Ayako went on to adopt the name Fuyumi Kayahara and began a new life in Tokyo. She was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood.
{{kns2 characters}}
333602714b536034dd817db625be04c69b2c2f86
1437
1436
2023-06-14T19:30:34Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image = [[File:fuy0301.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}}
== Plot ==
Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family.
In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine.
Ayako went on to adopt the name Fuyumi Kayahara and began a new life in Tokyo. Having been impregnated during her rendezvous with Ayato, Fuyumi gave birth to {{n|Michiru|Shirosaki}}. She gave Michiru up for adoption after she began to strangle her. Fuyumi was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood.
== Relationships ==
;Yukiko Kayahara
:Though the two are not related by blood, Fuyumi and Yukiko share a pathological drive to "become" others.
{{kns2 characters}}
4b6262f8affd9afff9030acd3bc646cbeb9700e4
1455
1437
2023-06-14T22:54:58Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fuyumi
| family name = Kayahara
| jname =
| image =
<tabber>
|-| Adult = [[File:fuy0301.png|x300px]]
|-| Teenager = [[File:sat0201.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}}
== Plot ==
Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family.
In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine.
Ayako went on to adopt the name Fuyumi Kayahara and began a new life in Tokyo. Having been impregnated during her rendezvous with Ayato, Fuyumi gave birth to {{n|Michiru|Shirosaki}}. She gave Michiru up for adoption after she began to strangle her. Fuyumi was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood.
== Relationships ==
;Yukiko Kayahara
:Though the two are not related by blood, Fuyumi and Yukiko share a pathological drive to "become" others.
{{kns2 characters}}
01525893f3342c8f16c7b3f35e2452a8ca4bc0f6
File:Meg0701.png
6
485
1438
2023-06-14T22:39:26Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Meg0101.png
6
320
1439
1008
2023-06-14T22:39:30Z
Otonashi Ayana
2
Otonashi Ayana uploaded a new version of [[File:Meg0101.png]]
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Meguri Takamiya
0
321
1440
1010
2023-06-14T22:39:46Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Meguri
| family name = Takamiya
| jname =
| image =
<tabber>
|-| Adult = [[File:meg0701.png|x300px]]
|-| Teenager = [[File:meg0501.png|x300px]]
</tabber>
| aka = Guriko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
{{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}}
{{kns2 characters}}
b2a4ce239ed650ab2d48e05c4e5472d3e4018b60
1441
1440
2023-06-14T22:39:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Meguri
| family name = Takamiya
| jname =
| image =
<tabber>
|-| Adult = [[File:meg0701.png|x300px]]
|-| Teenager = [[File:meg0701.png|x300px]]
</tabber>
| aka = Guriko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
{{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}}
{{kns2 characters}}
c250d6428fe8d7dbf02f3ad17621442211b521bf
1442
1441
2023-06-14T22:40:09Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Meguri
| family name = Takamiya
| jname =
| image =
<tabber>
|-| Adult = [[File:meg0701.png|x300px]]
|-| Teenager = [[File:meg0101.png|x300px]]
</tabber>
| aka = Guriko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
{{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}}
{{kns2 characters}}
f903b6cff09574d8f5710c32b6c23a81d0a083da
1456
1442
2023-06-15T00:58:27Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Meguri
| family name = Takamiya
| jname =
| image =
<tabber>
|-| Adult = [[File:meg0701.png|x300px]]
|-| Teenager = [[File:meg0101.png|x300px]]
</tabber>
| aka = Guriko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
{{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
{{kns2 characters}}
ba17f1565ddc255f3531025fece9d873534fffae
Karen Hinagami
0
322
1443
1374
2023-06-14T22:41:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Karen
| family name = Hinagami
| jname =
| image =
<tabber>
|-| Adult = [[File:kar0701.png|x300px]]
|-| Teenager = [[File:kar0501.png|x300px]]
</tabber>
| aka = Ohina<br>The Miko
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}}
== Plot ==
While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko" that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family.
In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting.
Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
*Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}.
{{kns2 characters}}
aba436c0680b06130fb6dcfe9b4da0a43b366321
File:Yuu0501.png
6
486
1444
2023-06-14T22:45:14Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Yuu0101.png
6
487
1445
2023-06-14T22:45:18Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Yu Futami
0
488
1446
2023-06-14T22:45:26Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Yu | family name = Futami | jname = | image = <tabber> |-| Adult = [[File:yuu0501.png|x300px]] |-| Teenager = [[File:yuu0101.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is the heir to the Futami Inn. == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2..."
wikitext
text/x-wiki
{{infobox character
| given name = Yu
| family name = Futami
| jname =
| image =
<tabber>
|-| Adult = [[File:yuu0501.png|x300px]]
|-| Teenager = [[File:yuu0101.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is the heir to the Futami Inn.
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
{{kns2 characters}}
ece0ec52ac909ef0ebe0a719d083ee711745d8f3
1448
1446
2023-06-14T22:46:25Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Yu
| family name = Futami
| jname =
| image =
<tabber>
|-| Adult = [[File:yuu0501.png|x300px]]
|-| Teenager = [[File:yuu0101.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is the heir to the Futami Inn.
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
{{kns2 characters}}
baadd0371aa5e4210c19b66a02f73844cb6006b8
Yu Futami/Family tree
0
489
1447
2023-06-14T22:45:43Z
Otonashi Ayana
2
Created page with "{{Family tree/Shizuru's children}}"
wikitext
text/x-wiki
{{Family tree/Shizuru's children}}
fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e
File:May0301.png
6
490
1449
2023-06-14T22:50:22Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Mayu Kamizono
0
491
1450
2023-06-14T22:50:29Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Mayu | family name = Kamizono | jname = | image = [[File:may0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse working at the [[Kuchiki Hospital]]. == Plot == {{spoiler|kns2|On November 29, 1957, Meguri is murdered in her home by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}} <div style="cl..."
wikitext
text/x-wiki
{{infobox character
| given name = Mayu
| family name = Kamizono
| jname =
| image = [[File:may0301.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a nurse working at the [[Kuchiki Hospital]].
== Plot ==
{{spoiler|kns2|On November 29, 1957, Meguri is murdered in her home by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}}
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
{{kns2 characters}}
0481dbe2f49eeab327069b3dc32e9d3f4e156846
Mayu Kamizono/Family tree
0
492
1451
2023-06-14T22:50:42Z
Otonashi Ayana
2
Created page with "{{Family tree/Shizuru's children}}"
wikitext
text/x-wiki
{{Family tree/Shizuru's children}}
fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e
File:Sat0101.png
6
493
1452
2023-06-14T22:52:32Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Satsuki
0
315
1453
967
2023-06-14T22:52:35Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| name = Satsuki
| jname =
| image = [[File:sat0101.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''Satsuki''' is an enigmatic girl in the [[Hitogata]] settlement.
{{kns2 characters}}
51e2c072301083bc0ec1bd3416f341275793823c
File:Sat0201.png
6
494
1454
2023-06-14T22:54:46Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Meguri Takamiya/Family tree
0
495
1457
2023-06-15T00:58:46Z
Otonashi Ayana
2
Created page with "{{Family tree/Shizuru's children}}"
wikitext
text/x-wiki
{{Family tree/Shizuru's children}}
fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e
File:Koh0301.png
6
496
1458
2023-06-15T00:59:18Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Kohane Tori/Family tree
0
497
1459
2023-06-15T00:59:59Z
Otonashi Ayana
2
Created page with "{{Family tree/Shizuru's children}}"
wikitext
text/x-wiki
{{Family tree/Shizuru's children}}
fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e
Kohane Tori
0
498
1460
2023-06-15T01:00:03Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Kohane | family name = Tori | jname = | image = [[File:koh0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}}"
wikitext
text/x-wiki
{{infobox character
| given name = Kohane
| family name = Tori
| jname =
| image = [[File:koh0301.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]].
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
{{kns2 characters}}
dedff6a2f4c1b5c5c57c7f1c40d107535f0e72f2
File:Ryo0301.png
6
499
1461
2023-06-15T01:02:45Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Ryoichi Yaginuma
0
203
1462
1415
2023-06-15T01:03:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Ryoichi
| family name = Yaginuma
| jname =
| image = [[File:ryo0301.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{cartagra}}
| seiyu =
| relations =
}}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement from the police force. He takes on a greater role in {{kns}}, where he has since become a founding member of the [[w:National Police Agency (Japan)|NPA]].
== Plot ==
Yaginuma was a frequent patron of the [[Yukishiro]] brothel, with a preference for seeing [[Otoha]]. {{spoiler|cartagra|He plays a pivotal role in the arrest of {{n|Kazuma|Arishima}} after being convinced of his guilt by {{n|Shugo|Takashiro}}.}}
{{cartagra characters|state=collapsed}}
{{kns characters}}
{{kns2 characters|state=collapsed}}
63255cbfe3a9d7ed395649336176e7d8be65cebe
File:Skyo0101a.png
6
500
1463
2023-06-15T01:06:18Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Kyozo Uozumi
0
501
1464
2023-06-15T01:10:31Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Kyozo | family name = Uozumi | jname = 魚住 夾三 | image = [[File:skyo0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = }}{{nihongo|'''{{c}}'''|魚住 夾三}} is a police officer working in Tokyo. He is an old friend of {{n|Reiji|Tokisaka}}, {{n|Shugo|Takashiro}}, {{n|Natsume|Takashiro}}, and {{n|Kyoko|Hazuki}}. == Plot == Uozumi is the..."
wikitext
text/x-wiki
{{infobox character
| given name = Kyozo
| family name = Uozumi
| jname = 魚住 夾三
| image = [[File:skyo0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations =
}}{{nihongo|'''{{c}}'''|魚住 夾三}} is a police officer working in Tokyo. He is an old friend of {{n|Reiji|Tokisaka}}, {{n|Shugo|Takashiro}}, {{n|Natsume|Takashiro}}, and {{n|Kyoko|Hazuki}}.
== Plot ==
Uozumi is the first detective assigned to the primary case of {{kns}}.
{{spoiler|kns2|After {{kns|n}}, Uozumi was reassigned to another police department, taking him away from Tokyo.}}
== Trivia ==
*Uozumi has a crush on {{n|Kyoko|Hazuki}}, however he hasn't revealed his feelings to her.
{{kns characters}}
50a25e74d7b3cec904bc761f0d91ef09790d6adb
1465
1464
2023-06-15T01:10:52Z
Otonashi Ayana
2
Otonashi Ayana moved page [[Uozumi Kyozo]] to [[Kyozo Uozumi]] without leaving a redirect
wikitext
text/x-wiki
{{infobox character
| given name = Kyozo
| family name = Uozumi
| jname = 魚住 夾三
| image = [[File:skyo0101a.png|x300px]]
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
| relations =
}}{{nihongo|'''{{c}}'''|魚住 夾三}} is a police officer working in Tokyo. He is an old friend of {{n|Reiji|Tokisaka}}, {{n|Shugo|Takashiro}}, {{n|Natsume|Takashiro}}, and {{n|Kyoko|Hazuki}}.
== Plot ==
Uozumi is the first detective assigned to the primary case of {{kns}}.
{{spoiler|kns2|After {{kns|n}}, Uozumi was reassigned to another police department, taking him away from Tokyo.}}
== Trivia ==
*Uozumi has a crush on {{n|Kyoko|Hazuki}}, however he hasn't revealed his feelings to her.
{{kns characters}}
50a25e74d7b3cec904bc761f0d91ef09790d6adb
Template:Kns characters
10
138
1466
1148
2023-06-15T01:11:21Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = kns characters
| title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Reiji|Tokisaka}}
* {{n|Kyozo|Uozumi}}
* {{n|Shugo|Takashiro}}
* {{n|Ryoichi|Yaginuma}}
| group2 = [[Ouba Private Girls' Academy|<span style="color:#202122">Ouba Academy</span>]]
| list2 =
{{Navbox|child
| group1 = Students
| list1 =
* {{n|Yukari|Tokisaka}}
* {{n|Toko|Kuchiki}}
* {{n|Toko|Mizuhara}}
* {{n|Tsuzuriko|Yosomiya}}
* {{n|Orihime|Tsukishima}}
* {{n|Ayumu|Sato}}
* {{n|Yui|Nishizono}}
* {{n|Kei|Koizumi}}
* {{n|Yumi|Takagawa}}
| group2 = Faculty
| list2 =
* {{n|Tokio|Saeki}}
* {{n|Nene|Akazaki}}
* {{n|Tatsuhiko|Kusaka}}
}}
| group3 = Hospital Staff
| list3 =
* {{n|Yasutada|Kuchiki}}
* {{n|Koharu|Yamanouchi}}
* {{n|Naoki|Murase}}
* {{n|Tamaki|Saito}}
| group4 = Other
| list4 =
* {{n|Kyoko|Hazuki}}
* {{n|Hatsune|Amemiya}}
* {{n|Natsume|Takashiro}}
* {{n|Kazuna|Takashiro}}
* {{n|Yukiko|Mamiya}}
* {{n|Shinzo|Mamiya}}
* [[Stella]]
* {{n|Chizuru|Kuchiki}}
* {{n|Fumiya|Kuchiki}}
* [[Shinji Mamiya|{{o|Shin|Katsuragi}}]]
}}
<includeonly>
[[Category:Characters]]
{{kns/cat}}
</includeonly>
943af85efeaaaadcbb2ae0b2b8200b7e09f468d9
File:Shaz0101a.png
6
502
1467
2023-06-15T01:13:36Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Kyoko Hazuki
0
503
1468
2023-06-15T01:13:41Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Kyoko | family name = Hazuki | jname = 葉月 杏子 | image = [[File:shaz0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Kaname|Yuzuki}} }}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}. {{kns characters} {{kns2 characters|state=collapsed}}"
wikitext
text/x-wiki
{{infobox character
| given name = Kyoko
| family name = Hazuki
| jname = 葉月 杏子
| image = [[File:shaz0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu = {{o|Kaname|Yuzuki}}
}}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}.
{{kns characters}
{{kns2 characters|state=collapsed}}
a6773938fc3444e7d6447d7f416822bf9d9141d2
1469
1468
2023-06-15T01:13:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kyoko
| family name = Hazuki
| jname = 葉月 杏子
| image = [[File:shaz0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu = {{o|Kaname|Yuzuki}}
}}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}.
{{kns characters}}
{{kns2 characters|state=collapsed}}
9149449f04de7e430a58f4a75e99a6520eeb18b7
1471
1469
2023-06-15T01:17:43Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kyoko
| family name = Hazuki
| jname = 葉月 杏子
| image = [[File:shaz0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu = {{o|Kaname|Yuzuki}}
}}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}.
== Plot ==
{{spoiler|kns2|By the time of {{kns2}}, Kyoko has begun a sexual relationship with {{n|Reiji|Tokisaka}}, however neither of them see the relationship as romantic.
{{n|Yukiko|Kayahara}} becomes endeared to Kyoko after visiting Moon World and becomes a regular customer. When her admiration becomes too strong, Yukiko stabs Kyoko in an attempt to "become" her. Not believing that Yukiko was acting maliciously, Kyoko refuses to admit who stabbed her when asked by the [[Kuchiki Hospital]] staff or the police.}}
{{kns characters}}
{{kns2 characters|state=collapsed}}
bbe292bfeed64f389824e7b6994d966baee52ee9
File:Hat100a.png
6
504
1472
2023-06-15T01:21:24Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
File:Shat0101a.png
6
505
1473
2023-06-15T01:21:28Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Hatsune Amemiya
0
506
1474
2023-06-15T01:24:52Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Hatsune | family name = Amemiya | jname = 雨宮 初音 | image = <tabber> |-| Adult = [[File:shat0101a.png|x300px]] |-| Teenager = [[File:hat100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, but purely in a service role a..."
wikitext
text/x-wiki
{{infobox character
| given name = Hatsune
| family name = Amemiya
| jname = 雨宮 初音
| image =
<tabber>
|-| Adult = [[File:shat0101a.png|x300px]]
|-| Teenager = [[File:hat100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, but purely in a service role as she was too young to take on clients. While at Yukishiro, she was taught to read by {{n|Shugo|Takashiro}}, whom she has a long-standing crush on.
{{cartagra characters|state=collapsed}}
{{kns characters}}
63a7c7cf54bc67d73a95c446ea62eb0902db69eb
1475
1474
2023-06-15T01:25:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Hatsune
| family name = Amemiya
| jname = 雨宮 初音
| image =
<tabber>
|-| Adult = [[File:shat0101a.png|x300px]]
|-| Teenager = [[File:hat100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, though purely in a service role as she was too young to take on clients. While at Yukishiro, she was taught to read by {{n|Shugo|Takashiro}}, whom she has a long-standing crush on.
{{cartagra characters|state=collapsed}}
{{kns characters}}
60c0b24f244d199c50b5c04a52c04c201fc21aa6
1476
1475
2023-06-15T01:27:32Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Hatsune
| family name = Amemiya
| jname = 雨宮 初音
| image =
<tabber>
|-| Adult = [[File:shat0101a.png|x300px]]
|-| Teenager = [[File:hat100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, though purely in a service role as she was too young to take on clients. While at Yukishiro, she was taught to read by {{n|Shugo|Takashiro}}, whom she has a long-standing crush on.
== Plot ==
{{spoiler|kns2|After Shugo and Kazuna move to Zushi to raise their newborn child, Hatsune goes with them to work as their babysitter.}}
{{cartagra characters|state=collapsed}}
{{kns characters}}
354a61133f87a2db74b94ecb17a5b4adbb3142a1
Template:Cartagra characters
10
201
1477
1369
2023-06-15T01:30:57Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Yukishiro
| list2 =
* [[Ujaku]]
* [[Rin]]
* [[Otoha]]
* [[Koyuki]]
* [[Seri]]
* [[Hatsune Amemiya]]
| group3 = Other
| list3 =
* {{n|Kazuna|Kozuki}}
* {{n|Yura|Kozuki}}
* {{n|Nana|Takashiro}}
* {{n|Takako|Ayasaki}}
* {{n|Kaori|Fukamizu}}
* {{n|Tokiko|Shigusa}}
* {{n|Akao|Ikuma}}
* {{n|Daisaku|Arata}}
}}<includeonly>
[[Category:Characters]]
[[Category:Cartagra]]
</includeonly>
721d13ea542d92bd328b5c31036c34c1f5b92276
1478
1477
2023-06-15T01:32:00Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{Navbox
| name = cartagra characters
| title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters
| state = {{{state|}}}
| listclass = hlist
| group1 = Detectives
| list1 =
* {{n|Shugo|Takashiro}}
* {{n|Aoki|Toji}}
* {{n|Arishima|Kazuma}}
* {{n|Ryoichi|Yaginuma}}
| group2 = Yukishiro
| list2 =
* [[Ujaku]]
* [[Rin]]
* [[Otoha]]
* [[Koyuki]]
* [[Seri]]
* {{n|Hatsune|Amemiya}}
| group3 = Other
| list3 =
* {{n|Kazuna|Kozuki}}
* {{n|Yura|Kozuki}}
* {{n|Nana|Takashiro}}
* {{n|Takako|Ayasaki}}
* {{n|Kaori|Fukamizu}}
* {{n|Tokiko|Shigusa}}
* {{n|Akao|Ikuma}}
* {{n|Daisaku|Arata}}
}}<includeonly>
[[Category:Characters]]
[[Category:Cartagra]]
</includeonly>
034cd0b7ad81ae391808b0725ce27cffaaa70a93
Masaki Tomoyuki
0
304
1479
1215
2023-06-15T01:42:37Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Masaki
| family name = Tomoyuki
| jname = 智之 真崎
| image = [[File:tom0101.png|x300px]]
| aka = {{o|Ayato|Hinagami}}<br \>Rihito
| gender = Male
| age =
| appearance = {{kns2}}
| seiyu =
}}{{nihongo|'''{{c}}'''|智之 真崎}}{{spoiler|kns2|, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}},}} is a man who is falsely accused of the murder of {{n|Mayu|Kamizono}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective.
== Plot ==
Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company.
The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata.
During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan.
<div style="clear:both">
== Relationships ==
{{family tree}}
{{hitogata family tree notice}}</div>
== Trivia ==
* Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}.
{{kns2 characters}}
17835745e302b932972756167d498142b38403c3
Kazuna Takashiro
0
292
1480
909
2023-06-15T01:47:36Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Kazuna
| family name = Takashiro
| jname = 高城 和菜
| image =
<tabber>
|-| Adult = [[File:skaz0101a.png|x300px]]
|-| Teenager = [[File:kad100a.png|x300px]]
</tabber>
| aka =
| gender = Female
| age =
| appearance = {{cartagra}}
| seiyu =
}}{{nihongo|'''{{c}}'''|高城 和菜}}, née '''Kozuki''', is a famous actress and the wife of {{n|Shugo|Takashiro}}.
{{cartagra characters|state=collapsed}}
{{kns characters}}
0e3b05ec67f8ebe38d3902cb568529b1d68ba3a1
Blessed Congregation
0
295
1481
1422
2023-06-15T18:11:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
== History ==
=== Congregation of the Blessed ===
The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}.
=== Senri ===
After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him.
After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction.
=== Blessed Congregation ===
After the dissolution of Senri, {{o|Tokihiro|Oribe}} reached out to the remnants of Senri and returned the cult to its origins, renaming it as the Blessed Congregation. {o|Keigo|Utsugi}} returned to the cult in a fiduciary position, amassing enough funds for the Congregation to open a moneylending business as well as an orphanage called [[White Lily Garden]].
== Known Members ==
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
2c63854c15177b169a1904b51252537007aba98e
1482
1481
2023-06-15T18:11:50Z
Otonashi Ayana
2
/* Blessed Congregation */
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
== History ==
=== Congregation of the Blessed ===
The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}.
=== Senri ===
After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him.
After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction.
=== Blessed Congregation ===
After the dissolution of Senri, {{o|Tokihiro|Oribe}} reached out to the remnants of Senri and returned the cult to its origins, renaming it as the Blessed Congregation. {{o|Keigo|Utsugi}} returned to the cult in a fiduciary position, amassing enough funds for the Congregation to open a moneylending business as well as an orphanage called [[White Lily Garden]].
== Known Members ==
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
9e4279f8093ee6f41f90cef3844e8dd96c8f60df
1483
1482
2023-06-15T18:12:31Z
Otonashi Ayana
2
wikitext
text/x-wiki
The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult.
== History ==
=== Congregation of the Blessed ===
The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}.
=== Senri ===
After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him.
After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction.
=== Blessed Congregation ===
After the dissolution of Senri, {{o|Tokihiro|Oribe}} reached out to the remnants of Senri and returned the cult to its origins, renaming it as the Blessed Congregation. {{o|Keigo|Utsugi}} returned to the cult in a fiduciary position, amassing enough funds for the Congregation to open a moneylending business as well as an orphanage called [[White Lily Garden]].
== Known Members ==
{{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }}
{{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}
{{cartagra/cat}}
{{kns2/cat}}
eaf6cdf5f71a952f2748d6e52a05ffef833bcbfe
Template:Cartagra/cat
10
507
1484
2023-06-15T18:13:02Z
Otonashi Ayana
2
Created page with "<includeonly>[[Category:Cartagra]]</includeonly>"
wikitext
text/x-wiki
<includeonly>[[Category:Cartagra]]</includeonly>
8af3b141f2f82c43ebda716706923adb261379d4
File:Saw0701.png
6
508
1485
2023-06-15T21:46:19Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Nanako Sawashiro
0
325
1486
1129
2023-06-15T21:46:22Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Nanako
| family name = Sawashiro
| jname =
| image = [[File:saw0701.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. She worked for the Kuroya clinic while in Hitogata, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]].
== Plot ==
Nanako spent most of her life in the [[Hitogata]] settlement with her father, Ginji Sawashiro. She was regularly subjected to sexual abuse at her father's hands, including being forced into prostitution. She and her father eventually moved to Tokyo together, where she murdered him with the help of {{n|Naori|Kuroya}}. She began working at the [[Kuchiki Hospital]] as a part-time nurse and later took on a second job at the New Leaf Garden nursery.
{{kns2 characters}}
68dec19bd2bcbc696f876f26fde54eb8b6e155ec
File:Say0101.png
6
509
1487
2023-06-15T21:46:45Z
Otonashi Ayana
2
File uploaded with MsUpload
wikitext
text/x-wiki
File uploaded with MsUpload
a655f04485ff507c02499d137d22a0d3e0ea32c2
Saya Shigusa
0
483
1488
1432
2023-06-15T21:46:56Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Saya
| family name = Shigusa
| jname =
| image = [[File:say0101.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns2}}
| seiyu =
}}'''{{c}}''' is a resident of the [[Hitogata]] settlement.
== Plot ==
Saya is a former Miko. She gave birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}.
== Trivia ==
{{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the corpses of Rika and Satsuki, she stores their limbs in boxes she keeps in the basement beneath the Shigusa shrine storehouse. On a second playthrough of {{kns2|n}}, a scene depicts Saya using one of Satsuki's dismembered arms to masturbate.|bullet=yes}}
{{kns2 characters}}
33b67eba2d0e69c88b9cfa9bf3604ac19659ae74
MediaWiki:Common.css
8
7
1489
1400
2023-09-13T05:33:05Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
:not(h1) .character-name:hover .family-name{
text-decoration: underline;
}
:not(h1) .character-name:hover .given-name{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-parser-output{
box-shadow: -10px 10px 10px white;
background-color: white;
}
.mw-dismissable-notice{
display:flex;
flex-direction:row-reverse;
justify-content:center;
align-items:center;
background-color: #F8F9FA;
border:1px solid #A2A9B1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
cc55d611a714e84f162212733fec997ae6062b80
1490
1489
2023-09-13T05:33:50Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
.character-name:hover .family-name{
text-decoration: underline;
}
.character-name:hover .given-name{
text-decoration: underline;
}
h1{
pointer-events:none;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-parser-output{
box-shadow: -10px 10px 10px white;
background-color: white;
}
.mw-dismissable-notice{
display:flex;
flex-direction:row-reverse;
justify-content:center;
align-items:center;
background-color: #F8F9FA;
border:1px solid #A2A9B1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
9ea2a9b17f00a820fcb0028384fc84036f7ebe57
1493
1490
2023-09-13T05:53:03Z
Otonashi Ayana
2
css
text/css
@import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap');
:root{
--handwriting: Merienda;
--color-theme: #DB5555;
--color-theme-2: #D39292;
--color-theme-3: #D99F9F;
--color-base: #333231;
--color-base-2: #232323;
--color-white: #E0E0E0;
--color-white-2: #F5F5F5;f
--color-blue: rgb(132, 166, 247)
}
/* Variable lines that don't work with templatestyles because of course */
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: var(--color-theme); /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: var(--color-theme-2); /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: var(--color-theme-3); /* Level 3 color */
}
.mw-logo-wordmark{
font-family:var(--handwriting);
}
.item-title{
font-family:var(--handwriting);
pointer-events:none;
}
.tree-table{
background-color:white;
padding: 2em;
}
.tree-fade > table{
position: relative;
}
.tree-fade > table::after{
content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background-image: linear-gradient(white, transparent 56px);
mix-blend-mode: screen;
pointer-events: none;
}
.tree-width td {
min-width:10px;
}
.charbox .name{
pointer-events:none;
}
.tabber__tabs{
justify-content:center;
}
.tabber__panel{
overflow:hidden;
}
.tabber__header{
margin-bottom: 10px;
}
a .character-name:hover .family-name{
text-decoration: underline;
}
a .character-name:hover .given-name{
text-decoration: underline;
}
.mw-body::before{
content: '';
position: absolute;
top: -195px;
left: 0;
width:100%;
height:100%;
background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png");
background-repeat: no-repeat;
background-position: bottom right;
background-size: 50%;
opacity: 0.25;
transform: scaleX(-100%);
mix-blend-mode: multiply;
pointer-events: none;
}
.mw-parser-output{
box-shadow: -10px 10px 10px white;
background-color: white;
}
.mw-dismissable-notice{
display:flex;
flex-direction:row-reverse;
justify-content:center;
align-items:center;
background-color: #F8F9FA;
border:1px solid #A2A9B1;
}
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .mw-special-Watchlist #watchlist-message,
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
.references span[ rel~='mw:referencedBy' ] > a:before {
content: counter( mw-ref-linkback, lower-alpha );
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */
.mw-parser-output table.mw-hiero-table td {
vertical-align: middle;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon,
div.titleblacklist-warning {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Increase the height of the image upload box */
#wpUploadDescription {
height: 13em;
}
/* Minimum thumb width */
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Gallery styles background changes are restricted to screen view.
In printing we should avoid applying backgrounds. */
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, or portals. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img {
background-image: none;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
-webkit-font-feature-settings: "lnum", "tnum", "kern" 0;
font-feature-settings: "lnum", "tnum", "kern" 0;
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
9a26ca7c38d2a610281e2c75da2d3b8c5752c5d9
Stella
0
293
1491
1195
2023-09-13T05:34:52Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Stella
| family name = Maris
| jname =
| image = [[File:ssta0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led to her being bullied for much of her childhood and she subsequently became a selective mute for several years. She is the twin sister of {{n|Celestial|Stella}}; the two can only be differentiated by the moles near their left eye.
== Relationships ==
{{kns characters}}
ce47894f72dc032c87e9adc59624b6527ea3de48
1492
1491
2023-09-13T05:35:28Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Maris
| family name = Stella
| jname =
| image = [[File:ssta0101a.png|x300px]]
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led to her being bullied for much of her childhood and she subsequently became a selective mute for several years. She is the twin sister of {{n|Celestial|Stella}}; the two can only be differentiated by the moles near their left eye.
== Relationships ==
{{kns characters}}
655318a4e57bfb0015663d5eaf7d5812e11acc31
Yasutada Kuchiki
0
511
1495
2023-10-01T13:55:26Z
Otonashi Ayana
2
Created blank page
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
1498
1495
2023-10-01T14:01:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{#genealogy:tree|descendants=List|delimiter=char|format=mermaid}}
683f7155651729fc973777b1eb58a78cc45bef0d
1500
1498
2023-10-01T14:04:01Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Yasutada
| family name = Kuchiki
| jname =
| image =
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}
75e1d701a6a5c432738305f39709c651cb3b1a08
Fumiya Kuchiki
0
512
1496
2023-10-01T13:55:32Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Fumiya | family name = Kuchiki | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }} == Relationships == {{#genealogy:parent|Yasutada Kuchiki}}"
wikitext
text/x-wiki
{{infobox character
| given name = Fumiya
| family name = Kuchiki
| jname =
| image =
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}
== Relationships ==
{{#genealogy:parent|Yasutada Kuchiki}}
1bd0eb8b80ced1266024e37ae003b8b78f0b6e88
1499
1496
2023-10-01T14:03:29Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Fumiya
| family name = Kuchiki
| jname =
| image =
| aka =
| gender = Male
| age =
| appearance = {{kns}}
| seiyu =
}}
713a1626e7d38462adb671c9f665a6b12d156898
Chizuru Kuchiki
0
513
1497
2023-10-01T13:56:40Z
Otonashi Ayana
2
Created page with "{{infobox character | given name = Chizuru | family name = Kuchiki | jname = | image = | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }} == Relationships == {{#genealogy:parent|Yasutada Kuchiki}}"
wikitext
text/x-wiki
{{infobox character
| given name = Chizuru
| family name = Kuchiki
| jname =
| image =
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}
== Relationships ==
{{#genealogy:parent|Yasutada Kuchiki}}
5488d4a7e8d647fae6e1103c1f9972045947cea1
1501
1497
2023-10-01T14:04:17Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{infobox character
| given name = Chizuru
| family name = Kuchiki
| jname =
| image =
| aka =
| gender = Female
| age =
| appearance = {{kns}}
| seiyu =
}}
2130c9fbb7c9a6c99ad362a07f5244607bf47da5
Kara no Shoujo - The Second Episode
0
182
1502
1352
2023-10-01T14:07:33Z
Otonashi Ayana
2
wikitext
text/x-wiki
{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game
| title = Kara no Shōjo — The Second Episode
| jtitle = 虚ノ少女
| image = [[File:Cover kara no shoujo 2.jpg|245px]]
| developer = Innocent Grey
| publisher = {{plainlist |
* Innocent Grey
* MangaGamer
* Shiravune
}}
| director = {{o|Miki|Sugina}}
| writer = {{o|Miya|Suzuka}}
| artist = {{o|Miki|Sugina}}
| composer = Manyo
| platform = Microsoft Windows
| release = {{plainlist |
; Original
:February 8, 2013
}}
| prev = {{kns}}
| next = {{kns3}}
}}
'''''Kara no Shōjo — The Second Episode''''', originally released as {{nihongo|'''''Uro no Shōjo'''''|虚ノ少女}} and later released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013.
== Premise ==
In late 1957, {{n|Reiji|Tokisaka}} is still no closer to finding {{n|Shinji|Mamiya}} and {{n|Toko|Kuchiki}}. After another string of murders begins in Tokyo that is seemingly tied to the spiritual traditions of an isolated village in rural Japan, Reiji and his newest assistant, {{n|Masaki|Tomoyuki}} set out to solve the case.
== Trivia ==
*{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory.
== See also ==
* [[How to see spoilers|See spoilers]]
* [[{{PAGENAME}}/Endings|Endings]]
{{kns2/cat}}
fabc29843ec00aeaa8e781f694031fe8f4425030